7

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

1 回答 1

9

过去我遇到过这个问题……而且我用一个“肮脏”的老技巧解决了大部分问题。

做一个本地缓存 DNS

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

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

第一个会很慢,但是一旦它开始缓存并且更有效地解析,您将看到巨大的改进。

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

于 2012-10-25T00:43:27.940 回答