Scrapy y proxies

¿Cómo se utiliza el soporte de proxy con el framework de depuración web python Scrapy?

De las preguntas frecuentes sobre Scrapy ,

¿Scrapy funciona con proxies HTTP?

Sí. Se proporciona soporte para proxies HTTP (desde Scrapy 0.8) a través del middleware descargador HTTP Proxy. Ver HttpProxyMiddleware .

La forma más fácil de usar un proxy es establecer la variable de entorno http_proxy . Cómo se hace esto depende de tu caparazón.

 C: \> establecer http_proxy = http: // proxy: puerto
 csh% setenv http_proxy http: // proxy: puerto
 sh $ export http_proxy = http: // proxy: puerto

si desea utilizar https proxy y visitó https web, para establecer la variable de entorno http_proxy debe seguir a continuación,

 C: \> establecer https_proxy = https: // proxy: puerto
 csh% setenv https_proxy https: // proxy: puerto
 sh $ export https_proxy = https: // proxy: puerto

Single Proxy

  1. Habilita HttpProxyMiddleware en tu settings.py , así:

     DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1 } 
  2. Pase el proxy para solicitar a través de request.meta :

     request = Request(url="http://example.com") request.meta['proxy'] = "host:port" yield request 

También puede elegir una dirección proxy aleatoriamente si tiene un grupo de direcciones. Me gusta esto:

Múltiples poderes

 class MySpider(BaseSpider): name = "my_spider" def __init__(self, *args, **kwargs): super(MySpider, self).__init__(*args, **kwargs) self.proxy_pool = ['proxy_address1', 'proxy_address2', ..., 'proxy_addressN'] def parse(self, response): ...parse code... if something: yield self.get_request(url) def get_request(self, url): req = Request(url=url) if self.proxy_pool: req.meta['proxy'] = random.choice(self.proxy_pool) return req 

1-Cree un nuevo archivo llamado “middlewares.py” y guárdelo en su proyecto de scrapy y añádale el siguiente código.

 import base64 class ProxyMiddleware(object): # overwrite process request def process_request(self, request, spider): # Set the location of the proxy request.meta['proxy'] = "http://YOUR_PROXY_IP:PORT" # Use the following lines if your proxy requires authentication proxy_user_pass = "USERNAME:PASSWORD" # setup basic authentication for the proxy encoded_user_pass = base64.encodestring(proxy_user_pass) request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass 

2 – Abra el archivo de configuración de su proyecto (./project_name/settings.py) y agregue el siguiente código

 DOWNLOADER_MIDDLEWARES = { 'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 110, 'project_name.middlewares.ProxyMiddleware': 100, } 

Ahora, sus solicitudes deben ser aprobadas por este proxy. Simple, ¿no es así?

eso sería:

exportar http_proxy = http: // usuario: contraseña @ proxy: puerto

En Windows, reuní un par de respuestas anteriores y funcionó. Simplemente lo hice:

 C:> set http_proxy = http://username:password@proxy:port 

y luego lancé mi progtwig:

 C:/.../RightFolder> scrapy crawl dmoz 

donde “dmzo” es el nombre del progtwig (lo escribo porque es el que encuentras en un tutorial en Internet, y si estás aquí probablemente hayas comenzado desde el tutorial).

Hay un buen middleware escrito por alguien [1]: https://github.com/aivarsk/scrapy-proxies “middleware de proxy de Scrapy”

Como he tenido problemas al configurar el entorno en / etc / environment, esto es lo que puse en mi araña (Python):

 os.environ["http_proxy"] = "http://localhost:12345"