我正在使用scrapy从许多不同的域并行下载页面。我有几十万页要下载,所以性能很重要。
不幸的是,当我分析了scrapy的速度时,我每秒只能获得几页。真的,平均每秒大约 2 页。我以前写过我自己的多线程蜘蛛每秒处理数百页——我认为scrapy 使用twisted 等肯定会具有类似的魔力。
如何加快scrapy?我真的很喜欢这个框架,但是这个性能问题对我来说可能是一个交易破坏者。
这是 settings.py 文件的相关部分。我错过了一些重要的设置吗?
LOG_ENABLED = False
CONCURRENT_REQUESTS = 100
CONCURRENT_REQUESTS_PER_IP = 8
几个参数:
- 使用scrapy 0.14版
- 该项目部署在 EC2 大型实例上,因此应该有足够的内存、CPU 和带宽可供使用。
- 我正在使用 JSON 协议来安排爬虫,让爬虫在任何给定时间都充满几十个并发爬虫。
- 正如我在开始时所说,我正在从许多站点下载页面,因此远程服务器性能和 CONCURRENT_REQUESTS_PER_IP 不应该是一个问题。
- 目前,我只做很少的后期处理。没有xpath;没有正则表达式;我只是保存每个页面的 url 和一些基本统计信息。(一旦我解决了基本的性能问题,这将在稍后改变。)