我正在使用 scrapy 从许多不同的域并行下载页面。我有数十万个页面要下载,因此性能很重要。
不幸的是,由于我分析了 scrapy 的速度,我每秒只能获取几页。真的,平均每秒约 2 页。我以前编写过自己的多线程蜘蛛,每秒可处理数百页——我认为 scrapy 对扭曲等的使用肯定能够实现类似的魔力。
如何加快 scrapy 的速度?我真的很喜欢这个框架,但这个性能问题对我来说可能是一个交易破坏者。
这是 settings.py 文件的相关部分。我错过了一些重要的设置吗?
LOG_ENABLED = False
CONCURRENT_REQUESTS = 100
CONCURRENT_REQUESTS_PER_IP = 8
一些参数:
- 使用 scrapy 版本 0.14
- 该项目部署在 EC2 大型实例上,因此应该有充足的内存、CPU 和带宽可供使用。
- 我正在使用 JSON 协议(protocol)安排抓取,让抓取工具在任何给定时间都能处理几十个并发抓取。
- 正如我在开头所说的那样,我从很多站点下载页面,因此远程服务器性能和 CONCURRENT_REQUESTS_PER_IP 不应该是一个担心。
- 目前,我很少进行后期处理。没有 xpath;没有正则表达式;我只是为每个页面保存 url 和一些基本统计信息。 (一旦我解决了基本的性能问题,这将在稍后改变。)
最佳答案
我以前遇到过这个问题... 其中很大一部分我用“肮脏”的老技巧解决了。
大多数情况下,当您同时访问远程站点的 cpu 使用率如此高时,这是因为 scrapy 正在尝试解析 url。
请记住将主机 (/etc/resolv.conf) 上的 dns 设置更改为本地缓存 DNS 服务器。
在第一个中会很慢,但是一旦它开始缓存并且解析效率更高,您就会看到巨大的改进。
希望本文对您的问题有所帮助!
关于python - 如何提高scrapy的下载速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12427451/