Scrapy-不同域的不同下载_播放



我正在使用scrapy从网站下载一些文章以及文章中的图像。

关于场景的一些信息:

  • 文章来自主域名(jandan.net)
  • 文章中的图片来自其他网站。(例如tank.net)
  • 主域具有访问频率限制,因此我必须设置CCD_;403>错误
  • scrapy.contrib.pipeline.images.ImagesPipeline下载的图像
  • 图像下载似乎也受到download_delay设置的限制

当我必须限制从主域的下载速度时,我如何加快图像下载速度?

它没有公共接口(所以我的答案可能在未来的Scrapy版本中无效),但您可以检查内置AutoThrottle扩展的实现。

这有点复杂,但在Scrapy 1.0中,想法如下:有一个Downloader可以处理所有下载。为了决定并行发送多少请求以及使用Downloader的延迟,请使用"插槽"。通过更改插槽属性(delayconcurrency),您可以更改Downloader的行为。默认情况下,每个域都有一个插槽(如果设置了CONCURRENT_REQUESTS_per_IP选项,则为每个IP地址)。您还可以通过设置自定义request.meta['download_slot']将请求路由到任何其他插槽。

所有插槽的延迟和并发的默认值都是使用零碎的设置或蜘蛛属性(如download_delay)设置的。但你可以在运行时在Scrapy扩展中调整它们——这就是AutoThrottle正在做的。要对不同的请求使用不同的下载延迟,您需要更改相应插槽中的delay属性。

当您的请求被发送到不同的域时,任务就简化了——插槽已经不同了,您需要找到它们并更改delay值。如果你想对一个网站的不同部分使用不同的延迟,你必须使用download_delay0设置自定义插槽。

很抱歉,我不会提供一个现成的例子,但希望这能有所帮助。如果不清楚该从哪里着手,请随时提出更多问题。

此外,在这种情况下,只需启用AutoThrottle扩展即可,无需编写自定义扩展-请先尝试。

另一个更简单的选择是创建两个蜘蛛,并为它们设置不同的下载延迟:第一个下载页面并提取/存储图像链接,第二个下载图像。

最新更新