我正在使用Scrapy来抓取一个有数百万个页面的网站,我需要跟踪这些页面并从中提取信息
爬虫目前每分钟只抓取两百页,我需要加快速度
对于每个页面,爬虫将提取其链接并跟踪它们。问题是每个页面都有大约600个链接,其中大部分都在所有页面上,我认为这就是为什么爬虫程序调用所有链接的请求函数(即使它们是重复的)要花这么长时间的原因
以下是我的代码的简化版本:
def parse_data(self, response):
item = URL()
outlinks_extrated = [l.url for l in LinkExtractor(allow_domains=self.allowed_domains, deny_extensions = self.reg_deny, unique=False, restrict_xpaths=self.xpath_outlinks, tags=self.tags, deny = self.regex_denied).extract_links(response)]
for url in outlinks_extrated:
yield scrapy.Request(url, callback=self.parse_data)
item['url'] = response.request.url
yield item
我已经尝试设置并发请求和每个域的并发请求,但没有成功
有人知道为什么爬行要花这么长时间吗?我怎样才能加快速度
如果我理解正确,你的问题之一是重复链接。为什么不简单地对一组链接进行解析,并根据该集合检查要解析的所有链接?我的意思是:
这样,您将确保不会重新访问URL
编辑:也许更好的解决方案是实例化
scrapy.Request
一次;通过这种方式,您可以使用dont_filter
参数(有关详细信息,请检查https://docs.scrapy.org/en/latest/topics/request-response.html;您的请求将在默认情况下进行筛选,这样您就不会访问重复的URL)相关问题 更多 >
编程相关推荐