Caching 刮式持久缓存

Caching 刮式持久缓存,caching,scrapy,Caching,Scrapy,我们需要能够重新抓取历史数据。想象今天是6月23日。我们今天抓取了一个网站,但几天后我们意识到我们必须重新抓取它,“看到”它与23日的情况一模一样。这意味着,包括所有可能的重定向、GET和POST请求等。蜘蛛看到的所有页面,无论发生什么,都应该与23日的页面完全相同 用例:如果网站发生了变化,我们的爬行器无法爬行,我们希望能够回到“过去”,并在修复后重新运行爬行器 一般来说,这应该很容易-将标准的Scrapy缓存子类化,强制它为子文件夹使用日期,并具有类似的内容: cache/spider_n

我们需要能够重新抓取历史数据。想象今天是6月23日。我们今天抓取了一个网站,但几天后我们意识到我们必须重新抓取它,“看到”它与23日的情况一模一样。这意味着,包括所有可能的重定向、GET和POST请求等。蜘蛛看到的所有页面,无论发生什么,都应该与23日的页面完全相同

用例:如果网站发生了变化,我们的爬行器无法爬行,我们希望能够回到“过去”,并在修复后重新运行爬行器

一般来说,这应该很容易-将标准的Scrapy缓存子类化,强制它为子文件夹使用日期,并具有类似的内容:


cache/spider_name/2015-06-23/以下是缓存的目录

但是当我在做这个实验的时候,我意识到有时候蜘蛛会爬到现场的网站上。这意味着,它不会从缓存中获取某些页面(尽管磁盘上存在相应的文件),而是从实时网站获取这些页面。这尤其发生在带有CAPTCHA的页面上,但也可能发生在其他页面上

我们如何才能强迫Scrapy始终从缓存中获取页面,而不访问实时网站?理想情况下,它甚至可以在没有互联网连接的情况下工作。

更新:我们使用了虚拟策略,HTTPCACHE\u EXPIRATION\u SECS=0


谢谢大家!

要想做你想做的事,你应该在你的设置中设置以下内容:

HTTPCACHE_IGNORE_MISSING=True

如果启用,缓存中未找到的请求将被忽略,而不是下载

设置时: HTTPCACHE_EXPIRATION_SECS=0

它只保证“缓存的请求永远不会过期”,但如果页面不在缓存中,那么它将被下载

你可以查一下