小编典典

如何提高scrapy的下载速度?

scrapy

我正在使用scrapy从许多不同的域并行下载页面。我有成千上万的页面可供下载,因此性能非常重要。

不幸的是,当我描述了scrapy的速度时,每秒只能得到几页。确实,平均每秒约2页。以前,我已经编写了自己的多线程spider程序,以每秒执行数百页的工作-我想肯定,scrapy的使用Twisted等等可以实现类似的魔术。

我如何加快刮y速度?我真的很喜欢这个框架,但是这个性能问题对我来说可能是一个难题。

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

LOG_ENABLED = False
CONCURRENT_REQUESTS = 100
CONCURRENT_REQUESTS_PER_IP = 8

一些参数:

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

阅读 886

收藏
2020-04-09

共1个答案

小编典典

我过去曾遇到过这个问题……大部分情况是我用的老技巧解决的。

执行本地缓存DNS。

通常,当你拥有如此高的CPU使用率同时访问远程站点时,这是因为scrapy试图解析URL。

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

首先,它会很慢,但是一旦它开始缓存,它就会更有效地解决你将看到的巨大改进。

希望这对你的问题有所帮助!

2020-04-09