2014-12-08 2 views
4

Я использую Tor для сканирования веб-страниц. я начал Tor и Polipo обслуживание и добавилПолучить прокси-адрес IP-адрес, используя обход

class ProxyMiddleware(object): # overwrite process request def 
    process_request(self, request, spider): 
    # Set the location of the proxy 
    request.meta['proxy'] = "127.0.0.1:8123" 

Теперь, как я могу убедиться, что SCRAPY использует другой IP-адрес для запросов?

ответ

11

Вы можете получить первый запрос на проверку вашего общедоступного IP-адреса и сравнить его с IP-адресом, который вы видите при переходе на http://checkip.dyndns.org/ без использования Tor/VPN. Если они не совпадают, то, по-видимому, scrapy использует другой IP-адрес.

def start_reqests(): 
    yield Request('http://checkip.dyndns.org/', callback=self.check_ip) 
    # yield other requests from start_urls here if needed 

def check_ip(self, response): 
    pub_ip = response.xpath('//body/text()').re('\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')[0] 
    print "My public IP is: " + pub_ip 

    # yield other requests here if needed  
+0

plus один, гораздо более лучший вариант. Благодарю. – alecxe

+0

Добавление только одного URL-адреса для проверки IP-адреса. Это не требует анализа объекта ответа, поскольку тело содержит только ip-адрес. Защиту start_reqests(): выход Request ('http://icanhazip.com/', обратный вызов = self.check_ip) # выход других запросов от start_urls здесь при необходимости Защиту check_ip (самоощущение, ответ): печать «My публичный IP: «+ resonse.body – cyn0

6

Самый быстрый вариант - использовать scrapy shell и проверить на meta, чтобы он содержал proxy.

Запустите его из корня проекта:

$ scrapy shell http://google.com 
>>> request.meta 
{'handle_httpstatus_all': True, 'redirect_ttl': 20, 'download_timeout': 180, 'proxy': 'http://127.0.0.1:8123', 'download_latency': 0.4804518222808838, 'download_slot': 'google.com'} 
>>> response.meta 
{'download_timeout': 180, 'handle_httpstatus_all': True, 'redirect_ttl': 18, 'redirect_times': 2, 'redirect_urls': ['http://google.com', 'http://www.google.com/'], 'depth': 0, 'proxy': 'http://127.0.0.1:8123', 'download_latency': 1.5814828872680664, 'download_slot': 'google.com'} 

Таким образом, вы бы проверить, что промежуточное программное обеспечение настроено правильно и запрос проходит через прокси-сервер.