我想定期运行Scrapy以获取所有新内容。已产生的项目存储在数据库中。什么是最好的方法来验证,当Scrapy再次爬行时,已经产生的项目不会存储为重复项?
给项目散列是一种验证这个的好方法吗?我不希望最终在我的数据库中出现重复项目。
谢谢!
答案 0 :(得分:0)
如果您要在不同的抓取之间同时抓取项目,那么在TomášLinhart推荐的管道中检查数据库是否是一个有意义的选择。
否则,我认为在scrapy范围内执行复制过程是更好的选择。 例如,社区提供的scrapy-deltafetch,用于过滤蜘蛛中间件中的重复项以进行增量(delta)爬网。
DeltaFetch通过拦截蜘蛛回调中生成的每个Item和Request对象来工作。对于Items,它计算相关的请求标识符(a.k.a. fingerprint)并将其存储到本地数据库(嵌套)中。对于请求,Deltafetch计算请求指纹并丢弃请求(如果它已存在于数据库中)。
正确安装和配置此插件之后。然后运行抓取工具并查看Scrapy最后记录的统计信息。您可以看到有关deltafetch的新添加项目。
2017-12-25 16:36:17 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'deltafetch/skipped': 88,
'deltafetch/stored': 262,
'downloader/request_count': 286,
'finish_reason': 'finished',
...
'item_scraped_count': 262,
...
}