python - 如何提高scrapy的下载速度?

标签 python scrapy

我正在使用 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 和一些基本统计信息。 (一旦我解决了基本的性能问题,这将在稍后改变。)

最佳答案

我以前遇到过这个问题... 其中很大一部分我用“肮脏”的老技巧解决了。

Do a local cache DNS .

大多数情况下,当您同时访问远程站点的 cpu 使用率如此高时,这是因为 scrapy 正在尝试解析 url。

请记住将主机 (/etc/resolv.conf) 上的 dns 设置更改为本地缓存 DNS 服务器。

在第一个中会很慢,但是一旦它开始缓存并且解析效率更高,您就会看到巨大的改进。

希望本文对您的问题有所帮助!

关于python - 如何提高scrapy的下载速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12427451/

相关文章:

python - 学习Python : Is there a better way to write words + vars to file?

python - 循环尝试/排除

python - 修改 Scrapy ImagesPipeline 上的缓存 header

ubuntu - Cron 作业中的 Scrapy 爬虫

javascript - 飞溅 API/lua 错误 : attempt to index local element (a nil value)

Python Fabric 从单独的文件加载配置

python - 从列表中删除 nan

Python discord-bot 用户 token 不起作用

python - 运行使用 scrapy 和 selenium 创建的解析器时出现问题

python - 如何使用scrapy提取动态加载图片的src