Scrapy持久缓存

时间:2015-06-23 14:57:10

标签: caching scrapy

我们需要能够重新抓取历史数据。想象一下今天是六月二十三日。我们今天抓取了一个网站,但几天后我们意识到我们必须重新抓取它,"看到"它与23日完全一样。这意味着,包括所有可能的重定向,GET和POST请求等。蜘蛛看到的所有页面都应该与23日完全一样,无论如何。

用例:如果网站发生了变化,我们的蜘蛛无法抓取某些内容,我们希望能够在过去的时间内恢复过来"我们修好之后重新运行蜘蛛。

通常,这应该很容易 - 将标准Scrapy的缓存子类化,强制它使用子文件夹的日期,并具有类似的东西:

cache/spider_name/2015-06-23/HERE ARE THE CACHED DIRS

但是当我尝试这个时,我意识到蜘蛛有时会抓住 live 网站。这意味着,它不会从缓存中获取一些页面(尽管磁盘上存在相应的文件),而是从实时网站获取它们。它发生在带有验证码的页面上,特别是其他一些页面。

我们如何强制Scrapy 始终从缓存中获取页面,而不是点击直播网站?理想情况下,它甚至应该没有互联网连接。

更新:我们已使用虚拟政策和HTTPCACHE_EXPIRATION_SECS = 0

谢谢!

1 个答案:

答案 0 :(得分:1)

要做到你想要的,你应该在你的设置中使用它:

HTTPCACHE_IGNORE_MISSING = True

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

当您设置时: HTTPCACHE_EXPIRATION_SECS = 0

它只向您保证“缓存的请求将永不过期”,但如果页面不在您的缓存中,则会下载。

您可以查看documentation.