我们需要能够重新抓取历史数据。想象一下今天是六月二十三日。我们今天抓取了一个网站,但几天后我们意识到我们必须重新抓取它,"看到"它与23日完全一样。这意味着,包括所有可能的重定向,GET和POST请求等。蜘蛛看到的所有页面都应该与23日完全一样,无论如何。
用例:如果网站发生了变化,我们的蜘蛛无法抓取某些内容,我们希望能够在过去的时间内恢复过来"我们修好之后重新运行蜘蛛。
通常,这应该很容易 - 将标准Scrapy的缓存子类化,强制它使用子文件夹的日期,并具有类似的东西:
cache/spider_name/2015-06-23/HERE ARE THE CACHED DIRS
但是当我尝试这个时,我意识到蜘蛛有时会抓住 live 网站。这意味着,它不会从缓存中获取一些页面(尽管磁盘上存在相应的文件),而是从实时网站获取它们。它发生在带有验证码的页面上,特别是其他一些页面。
我们如何强制Scrapy 始终从缓存中获取页面,而不是点击直播网站?理想情况下,它甚至应该没有互联网连接。
更新:我们已使用虚拟政策和HTTPCACHE_EXPIRATION_SECS = 0
谢谢!
答案 0 :(得分:1)
要做到你想要的,你应该在你的设置中使用它:
HTTPCACHE_IGNORE_MISSING = True
然后,如果启用,将忽略缓存中未找到的请求而不是下载。
当您设置时: HTTPCACHE_EXPIRATION_SECS = 0
它只向您保证“缓存的请求将永不过期”,但如果页面不在您的缓存中,则会下载。
您可以查看documentation.