首页 > 解决方案 > Python管道重复检查器,使用“raise DropItem”,但我们如何让它向下管道?

问题描述

raise DropItem 下面会产生过多的噪音并输出完整的对象

问题:我们怎样才能让它只输出字符串?还是有另一种方法可以将项目放入管道中?

结果现在是一个包含所有值的整个对象,并且输出混乱。希望是静默删除 1 个项目......我们之前使用过 delete() 但这导致后来的管道出现错误。帮助表示赞赏

    # Duplicate checker based on https://scrapy2.readthedocs.io/en/latest/topics/item-pipeline.html
    if item['sku'] in self.skus_seen:
        if "url" not in item or not item['url']:
            item['url'] = '???, plz store item url in spider'
        raise DropItem(f"Duplicate products {item['sku']} at {item['url']}")

标签: pythonpython-pipelines

解决方案


一个受欢迎的问题和答案;)

这里给出

实施

从 scrapy import logformatter 导入日志记录

类 PoliteLogFormatter(logformatter.LogFormatter): def drop(self, item, exception, response, spider): return { 'level': logging.INFO, 'msg': logformatter.DROPPEDMSG, 'args': { 'exception': exception , '项目': 项目, } }

Scrapy - 悄悄地丢下一个物品


推荐阅读