【问题标题】:Replay a Scrapy spider on stored data在存储的数据上重放 Scrapy 蜘蛛
【发布时间】:2011-12-07 15:51:59
【问题描述】:

我已经开始使用Scrapy 抓取一些网站。如果我稍后向我的模型添加一个新字段或更改我的解析功能,我希望能够离线“重播”下载的原始数据以再次抓取它。看起来 Scrapy 曾经有能力将原始数据存储在回放文件中:

http://dev.scrapy.org/browser/scrapy/trunk/scrapy/command/commands/replay.py?rev=168

但是这个功能似乎已经在当前版本的 Scrapy 中被移除了。还有其他方法可以实现吗?

【问题讨论】:

  • 您是否尝试在 ML 处询问?如果我在那里问你的问题并粘贴答案,这对我来说是不公平的:P
  • 如果你有我的问题的解决方案,我很好 - 只需参考你的来源;)

标签: python web-crawler scrapy


【解决方案1】:

如果你运行crawl --record=[cache.file] [scraper],你就可以使用replay [scraper]

或者,您可以通过将HttpCacheMiddleware 包含在DOWNLOADER_MIDDLEWARES 中来缓存所有带有HttpCacheMiddleware 的响应:

DOWNLOADER_MIDDLEWARES = {
    'scrapy.contrib.downloadermiddleware.httpcache.HttpCacheMiddleware': 300,
}

如果这样做,每次运行爬虫时,它都会先检查文件系统。

【讨论】:

  • 我尝试了scrapy crawl --record=mycache myspider 并收到错误消息“抓取:错误:没有这样的选项:--record”。我正在使用 Scrapy 0.12.0.2548。使用 HttpCacheMiddleware 将不起作用,因为随着时间的推移,我将发出多个相同的请求,这将返回不同的响应。
【解决方案2】:

您可以像http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html?highlight=FilesystemCacheStorage#httpcache-enabled 所说的那样启用 HTTPCACHE_ENABLED

缓存所有http请求和响应,实现简历抓取。

或者尝试 Jobs 来暂停和恢复抓取 http://scrapy.readthedocs.org/en/latest/topics/jobs.html

【讨论】:

  • 如果我想随着时间的推移发出相同的请求而返回不同的响应,这将不起作用。例如,如果我想每小时抓取 slashdot.org 主页怎么办?我不能重播这个,因为缓存的条目每小时都会被覆盖。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-29
  • 2017-07-09
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多