这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一个连接就结束了(虽然还有其他报错= = 不过这个去重的问题应该是没有了)