【问题标题】:How do I improve scrapy's download speed?如何提高scrapy的下载速度?
【发布时间】: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。

标签: python scrapy


【解决方案1】:

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

Do a local cache DNS.

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

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

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

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

【讨论】:

  • 根据scrapy docDNSCACHE_ENABLED默认为True
猜你喜欢
  • 2023-03-06
  • 1970-01-01
  • 2018-04-13
  • 2016-06-28
  • 1970-01-01
  • 1970-01-01
  • 2013-05-29
  • 2013-04-20
  • 1970-01-01
相关资源
最近更新 更多