python - 将scrapy结果存储到数据库时,如何避免存储重复
问题描述
我刚开始使用scrapy,并试图开发一个项目,从网站上抓取“新闻链接”。例如,有一个网站 iltalehti.fi,我想抓取他们的新闻,假设每 5 分钟一次。由于每次爬网都会返回重复项,如何避免将这些重复项存储在我的数据库中?因此,最终结果将是一个仅包含不同条目但不是同一新闻链接两次的数据库(如果我每 5 分钟运行一次爬虫,则在场景中为 200 次)。
任何帮助都非常受欢迎,请注意我对 python 知之甚少!
解决方案
Scrapy 使用管道对从网站上抓取的数据进行额外的处理(验证和过滤)。
您可以编写一个用于检查唯一项目和删除重复项目的管道。
这是 python 文档中的一个示例:
from scrapy.exceptions import DropItem
class DuplicatesPipeline(object):
def __init__(self):
self.ids_seen = set()
def process_item(self, item, spider):
if item['id'] in self.ids_seen:
raise DropItem("Duplicate item found: %s" % item)
else:
self.ids_seen.add(item['id'])
return item
更多关于管道的信息在这里
推荐阅读
- java - 线程“主”java.security.NoSuchAlgorithmException 中的异常:找不到任何支持 MyCipher 的提供程序
- llvm - 从源代码为 Ubuntu Bionic Beaver 构建 LLVM 的步骤是什么?
- javascript - 如何使每个图像具有不同的间隔 bxslider 以及时间间隔使用 localstorage
- python-3.x - 应用程序成功运行后,我的 travis-ci 构建将永远运行
- java - 如何将我创建的列表的键和值提供给地图?
- javascript - 防止javascript中的嵌套for循环
- android - 如何从我的应用程序内部打开网页?
- java - 如何将打包的 pom 构建为 jar
- c++ - 在标头中使用模板特化的问题
- sql - 查询不会将 nvarchar(30) 转换为小数