example scrapy

example - ¿Aumenta la concurance de scrapy para diferentes dominios?



scrapy python 3 (1)

Estoy intentando configurar scrapy para seguir enlaces externos.

Al mismo tiempo, tengo DOWNLOAD_DELAY = 3 , por lo que es cortés con los servidores.

¿Hay alguna forma de configurar scrapy para comenzar a descargar enlaces externos de forma inmediata y en paralelo?

De los registros, parece que los enlaces externos están en la misma cola que los enlaces internos.

Mi araña es:

16 class RedditSpider(scrapy.Spider): 17 name = "reddit" 18 start_urls = [''https://www.reddit.com/''] 19 20 def parse(self, response): 21 digest = hashlib.md5(response.body).hexdigest() 22 if pages.find_one({''digest'': digest}): 23 return 24 links = LinkExtractor(allow=()).extract_links(response) 25 urls = [l.url for l in links] 26 pages.insert_one({ 27 ''digest'': digest, 28 ''url'': response.url, 29 ''links'': urls, 30 ''body'': response.text 31 }) 32 for url in urls: 33 yield scrapy.Request(url, callback=self.parse)


Sí, el raspado usualmente raspa páginas en paralelo. Existen estas configuraciones que puede modificar / anular en settings.py de su proyecto scrapy:

  • CONCURRENT_REQUESTS
  • CONCURRENT_REQUESTS_PER_DOMAIN

(Consulte https://doc.scrapy.org/en/latest/topics/settings.html#concurrent-requests )

Valores recomendados:

Si bien CONCURRENT_REQUESTS_PER_DOMAIN debe establecerse en valores no demasiado altos para ser cortés con los servidores (por ejemplo, un dígito bajo), CONCURRENT_REQUESTS debe ser lo más alto posible (sin quedarse sin memoria) ... por lo que se recomienda un valor superior a 100 aquí.

Desafortunadamente la cola en scrapy no es perfecta, si tienes más de CONCURRENT_REQUESTS para el mismo dominio (por ejemplo, reddit) en los primeros lugares de tu cola, estos bloquearán el procesamiento de otras solicitudes en paralelo hasta que se hayan procesado suficientes y primero los dominios externos se asignan a las ranuras de procesamiento.

Así que tener un valor CONCURRENT_REQUESTS que sea lo más alto posible es la clave aquí.