2015-06-23 105 views
3

我们需要能够重新抓取历史数据。想象今天是六月二十三日。我们今天抓取了一个网站,但几天之后,我们意识到我们必须重新抓取它,“看到”它与23日一模一样。这意味着,包括所有可能的重定向,GET和POST请求等。蜘蛛看到的所有页面应该与第23页完全一样,不管它是什么。Scrapy永久缓存

使用案例:如果网站发生变化,而我们的蜘蛛无法抓取某些东西,我们希望能够恢复“过去”并在修复后重新运行蜘蛛。

一般情况下,这应该是很容易 - 子类标准Scrapy的缓存,强制使用日期的子文件夹,并有类似的东西:

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

但是当我用这个实验,我意识到有时蜘蛛抓取现场网站。这意味着,它不会从缓存中获取一些页面(尽管磁盘上存在适当的文件),而是从实时网站中获取它们。它发生在具有验证码的页面上,特别是,但也许还有其他一些。

我们如何强制Scrapy总是从缓存中取走页面,而不是直接打到活网站?理想情况下,它甚至可以在没有互联网连接的情况下工

更新:我们使用了假人政策和HTTPCACHE_EXPIRATION_SECS = 0

谢谢!

回答

0

做的正是你想要什么,你应该在你的设置有这样的:

HTTPCACHE_IGNORE_MISSING =真

然后,如果启用,在缓存中未发现的请求将被忽略,而不是下载。

当设置: HTTPCACHE_EXPIRATION_SECS = 0

它只是向你保证,“缓存请求将永不过期”,但如果一个网页是不是在你的缓存,那么这将是下载。

您可以检查documentation.