【发布时间】:2012-09-07 19:00:08
【问题描述】:
我正在使用 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 和一些基本统计信息。 (一旦我解决了基本的性能问题,这将在稍后改变。)
【问题讨论】:
-
Scrapy 确实运行得更快。是 CPU 受限还是显得空闲?是从一开始就很慢,还是性能下降?
-
从一开始就很慢。 AWS 显示机器以 100% 的 CPU 运行,但我认为扭曲的反应器总是这样做。机器仍然很敏捷,对 SSH 命令、新的 HTTP 请求等有响应。
-
过去一个小时一直在处理这个问题,我预感到问题出在 scrapyd 的服务配置文件中。我已经提出了一个关于重启scrapy守护进程的单独问题:stackoverflow.com/questions/12428143/…
-
嗯,可能是 html 太复杂,scrapy 提取器无法解析。尝试改用
lxml。 -
@Dikei 我很确定scrapy 已经在使用lxml。无论如何,就像我在问题的最后一个要点中所说的那样,我实际上并没有解析任何 HTML。