在存储数据上重放Scrapy爬虫

14 投票
2 回答
5807 浏览
提问于 2025-04-17 04:18

我最近开始使用Scrapy来抓取一些网站。如果我以后想在我的模型中添加一个新字段,或者修改我的解析函数,我希望能够在离线状态下“重放”之前下载的原始数据,再次进行抓取。看起来Scrapy之前有过将原始数据存储在重放文件中的功能:

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

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

2 个回答

5

你可以按照这里的说明来开启HTTPCACHE_ENABLED,具体内容可以查看这个链接:http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html?highlight=FilesystemCacheStorage#httpcache-enabled

这样做的目的是为了把所有的HTTP请求和响应都缓存起来,这样你就可以实现断点续爬。

或者你也可以尝试使用Jobs功能来暂停和恢复爬虫的工作,具体信息可以查看这个链接:http://scrapy.readthedocs.org/en/latest/topics/jobs.html

21

如果你运行 crawl --record=[cache.file] [scraper],那么你就可以使用 replay [scraper] 来重放之前的抓取记录。

另外,你也可以通过使用 HttpCacheMiddleware 来缓存所有的响应,只需要把它加到 DOWNLOADER_MIDDLEWARES 里:

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

如果你这样做,每次运行抓取程序时,它都会先检查文件系统。

撰写回答