如何提高scrapy的下载速度?

Abe*_*Abe 5 python scrapy

我正在使用scrapy来并行地从许多不同的域下载页面.我有数十万页要下载,所以性能很重要.

不幸的是,由于我已经描述了scrapy的速度,我每秒只能获得几页.实际上,平均每秒约2页.我以前写过我自己的多线程蜘蛛每秒做数百页 - 我当然认为scrapy使用扭曲等等会产生类似的魔力.

我如何加速scrapy?我非常喜欢这个框架,但这个性能问题对我来说可能是一个交易障碍.

这是settings.py文件的相关部分.我错过了一些重要的设置吗?

LOG_ENABLED = False
CONCURRENT_REQUESTS = 100
CONCURRENT_REQUESTS_PER_IP = 8
Run Code Online (Sandbox Code Playgroud)

一些参数:

  • 使用scrapy版本0.14
  • 该项目部署在EC2大型实例上,因此应该有足够的内存,CPU和带宽.
  • 我正在使用JSON协议安排爬网,在任何给定时间保持爬虫充满了几十个并发爬网.
  • 正如我在开始时所说的,我正在从许多站点下载页面,因此远程服务器性能和CONCURRENT_REQUESTS_PER_IP应该不用担心.
  • 目前,我正在做很少的后期处理.没有xpath; 没有正则表达式; 我只是为每个页面保存网址和一些基本统计信息.(一旦我解决了基本的性能问题,这将会改变.)

Car*_*ano 9

我过去遇到过这个问题......而且很大一部分我解决了'脏'旧的棘手问题.

做本地缓存DNS.

大多数情况下,如果你有高CPU使用率来访问同步远程站点,那是因为scrapy正在尝试解析这些URL.

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

在第一个将是缓慢的,但一旦它开始缓存,它更有效的解决你将看到巨大的改进.

我希望这能帮助你解决问题!

  • 根据[scrapy doc](http://doc.scrapy.org/en/latest/topics/settings.html#dnscache-enabled),默认情况下`DNSCACHE_ENABLED`为'True`. (4认同)