Obtener el proxy de la dirección IP utilizando para rastrear

Yo uso Tor para rastrear páginas web. Comencé el servicio de tor y polipo y agregué

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" 

Ahora, ¿cómo puedo asegurarme de que scrapy utiliza una dirección IP diferente para las solicitudes?

Puede presentar la primera solicitud para verificar su IP pública y compararla con la IP que ve cuando visita http://checkip.dyndns.org/ sin usar Tor / VPN. Si no son lo mismo, scrapy está usando una IP diferente, obviamente.

 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 

La opción más rápida sería usar el scrapy shell y verificar que el meta contenga el proxy .

Comience desde la raíz del proyecto:

 $ 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'} 

De esta manera, verificará que el middleware esté configurado correctamente y que la solicitud pase por el proxy.