【发布时间】:2019-11-08 11:18:28
【问题描述】:
我目前正在构建一个使用以下设置执行广泛抓取的 Scrapy 脚本:
'CONCURRENT_REQUESTS': 600,
'CONCURRENT_REQUESTS_PER_DOMAIN': 25,
'CONCURRENT_ITEMS': 250,
'REACTOR_THREADPOOL_MAXSIZE': 600,
为了执行广泛的爬取,我在我的蜘蛛中循环遍历域列表,如下所示:
def start_requests(self):
for domain in self.domains:
yield scrapy.Request("https://www." + domain['domain'], self.parse, meta={'domain':domain})
循环运行良好,每秒调用 10 次以上。
但我注意到,当我将第一个项目发送到我的管道(执行简单的循环和条件检查)中处理时,我的整个scraping都会变慢。
问题似乎是 start_requests() 中的循环等待当前处理的项目完成,然后继续我对新域的广泛抓取,尽管这远低于我的“CONCURRENT_REQUESTS”限制。
结果是一个运行速度慢 2 到 3 倍的脚本。
项目处理不应该阻止请求吗?
【问题讨论】: