【scrapy_redis】调试后爬取了部分数据,然后重新调试时,直接被去重机制过滤掉无法重头开始爬取

这2天遇到一个问题,之前调试的时候爬取了一些数据,结果第二天重新调试的时候发现爬虫很快结束,而且还没有报错。后来从日志里看到这个:

no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicate

这句就是在get第一个链接后出现的日志,大概意思就是“不会重复出现”,所以我猜想可能是因为redis自带了去重的机制,所以已经爬取的内容不会重新去爬

后来我去百度解决方案。首先,有人说在setting里把SCHEDULER_PERSIST改为false,经验证是没有用的。

然后无意间看到redis目录下有个文件叫dump.rdb,百度了一下,网友的回答:

”简而言之,dump.rdb是由Redis服务器自动生成的

默认情况下 每隔一段时间redis服务器程序会自动对数据库做一次遍历,把内存快照写在一个叫做“dump.rdb”的文件里,这个持久化机制叫做SNAPSHOT。有了SNAPSHOT后,如果服务器宕机,重新启动redis服务器程序时redis会自动加载dump.rdb,将数据库状态恢复到上一次做SNAPSHOT时的状态。

至于多久做一次SNAPSHOT,SNAPSHOT文件的路径和文件名,你可以在redis的conf文件里指定。

除了SNAPSHOT,redis还支持AOF持久化。”

看了和这个回答之后,我在想如果删掉了这个文件,会不会就可以了呢?

事实证明,结果还是一样的。今天再继续查,发现有网友跟我遇到同样问题:

scrapy-redis的dupefilter的数据如何重置或者清空呢

使用scrapy-redis蜘蛛爬过以后,再爬就无法爬了。如果给蜘蛛改个名字,就可以重新爬取,如果改回原来的名字就又开始了去重机制,虽然需要dupefilter,但是如果调试中生成一些数据,想重新爬取的话,如何解决这个问题呢。

如何删除dupefilter之前记录的爬过的url数据呢。

在这里下面找到这样一个答案:

SCHEDULER_FLUSH_ON_START = True
在设置里面可以添加这一句就可以,自动清理redis里面的key

做了这个设置以后,再次运行,现在就没有get一个连接就结束了(虽然还有其他报错= = 不过这个去重的问题应该是没有了)

猜你喜欢

转载自www.cnblogs.com/HAHACHANGEFROMNOW/p/9424728.html