首页 > 解决方案 > 将scrapy结果存储到数据库时,如何避免存储重复

问题描述

我刚开始使用scrapy,并试图开发一个项目,从网站上抓取“新闻链接”。例如,有一个网站 iltalehti.fi,我想抓取他们的新闻,假设每 5 分钟一次。由于每次爬网都会返回重复项,如何避免将这些重复项存储在我的数据库中?因此,最终结果将是一个仅包含不同条目但不是同一新闻链接两次的数据库(如果我每 5 分钟运行一次爬虫,则在场景中为 200 次)。

任何帮助都非常受欢迎,请注意我对 python 知之甚少!

标签: pythonweb-scrapingscrapy

解决方案


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

更多关于管道的信息在这里


推荐阅读