tutorial spider example español scrapy

example - scrapy spider



¿Cómo establecer diferentes ajustes de scrapy para diferentes arañas? (5)

Quiero habilitar algún http-proxy para algunas arañas, y desactivarlas para otras arañas.

¿Puedo hacer algo como esto?

# settings.py proxy_spiders = [''a1'' , b2''] if spider in proxy_spider: #how to get spider name ??? HTTP_PROXY = ''http://127.0.0.1:8123'' DOWNLOADER_MIDDLEWARES = { ''myproject.middlewares.RandomUserAgentMiddleware'': 400, ''myproject.middlewares.ProxyMiddleware'': 410, ''scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware'': None } else: DOWNLOADER_MIDDLEWARES = { ''myproject.middlewares.RandomUserAgentMiddleware'': 400, ''scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware'': None }

Si el código anterior no funciona, ¿hay alguna otra sugerencia?


¿Por qué no usar dos proyectos en lugar de solo uno?

Vamos a nombrar estos dos proyectos con proj1 y proj2 . En la settings.py proj1 , ponga esta configuración:

HTTP_PROXY = ''http://127.0.0.1:8123'' DOWNLOADER_MIDDLEWARES = { ''myproject.middlewares.RandomUserAgentMiddleware'': 400, ''myproject.middlewares.ProxyMiddleware'': 410, ''scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware'': None }

En proj2 de proj2 , ponga estas configuraciones:

DOWNLOADER_MIDDLEWARES = { ''myproject.middlewares.RandomUserAgentMiddleware'': 400, ''scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware'': None }


Puede definir su propio middleware proxy, algo sencillo como este:

from scrapy.contrib.downloadermiddleware import HttpProxyMiddleware class ConditionalProxyMiddleware(HttpProxyMiddleware): def process_request(self, request, spider): if getattr(spider, ''use_proxy'', None): return super(ConditionalProxyMiddleware, self).process_request(request, spider)

Luego, defina el atributo use_proxy = True en las arañas en las que desea tener habilitado el proxy. No olvides deshabilitar el middleware de proxy predeterminado y habilitar el tuyo modificado.


un poco tarde, pero desde la versión 1.0.0 hay una nueva función en scrapy donde puedes anular la configuración por araña como esta:

class MySpider(scrapy.Spider): name = "my_spider" custom_settings = {"HTTP_PROXY":''http://127.0.0.1:8123'', "DOWNLOADER_MIDDLEWARES": {''myproject.middlewares.RandomUserAgentMiddleware'': 400, ''myproject.middlewares.ProxyMiddleware'': 410, ''scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware'': None}} class MySpider2(scrapy.Spider): name = "my_spider2" custom_settings = {"DOWNLOADER_MIDDLEWARES": {''myproject.middlewares.RandomUserAgentMiddleware'': 400, ''scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware'': None}}


Puede agregar setting.overrides dentro del archivo spider.py Ejemplo que funciona:

from scrapy.conf import settings settings.overrides[''DOWNLOAD_TIMEOUT''] = 300

Para ti, algo como esto también debería funcionar

from scrapy.conf import settings settings.overrides[''DOWNLOADER_MIDDLEWARES''] = { ''myproject.middlewares.RandomUserAgentMiddleware'': 400, ''scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware'': None }


Hay una forma nueva y más fácil de hacer esto.

class MySpider(scrapy.Spider): name = ''myspider'' custom_settings = { ''SOME_SETTING'': ''some value'', }

Yo uso Scrapy 1.3.1