gpt4 book ai didi

python - 在 Scrapy 的 csvexports 中使用附加模式导出项目时过滤重复条目

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:16 26 4
gpt4 key购买 nike

我试图弄清楚如何预先检查要导出的 csv 文件中的行中是否已存在某个项目。如果该项目不存在,则需要附加该项目。否则该元素应被丢弃。到目前为止,我已经在项目管道中完成了以下操作,但它不起作用,因为无论如何它都会附加到 csv 文件。

我的管道.py:

from scrapy import signals
from scrapy.contrib.exporter import CsvItemExporter
import csv

class BlogscrapePipeline(object):

def __init__(self):
self.files = {}

@classmethod
def from_crawler(cls, crawler):
pipeline = cls()
crawler.signals.connect(pipeline.spider_opened, signals.spider_opened)
crawler.signals.connect(pipeline.spider_closed, signals.spider_closed)
return pipeline

def spider_opened(self, spider):

file = open('%s_items.csv' % spider.name, 'a+b')
self.files[spider] = file
self.exporter = CsvItemExporter(file)
self.exporter.fields_to_export = ['Title','Link','Comments','Words']
self.exporter.start_exporting()

def spider_closed(self, spider):
self.exporter.finish_exporting()
file = self.files.pop(spider)
file.close()

def process_item(self, item, spider):

with open('%s_items.csv' % spider.name, 'rt',encoding='utf-8') as file:
reader=csv.reader(file)
for row in reader:
if item not in row:
self.exporter.export_item(item)
return item

items.py:

import scrapy

class BlogscrapeItem(scrapy.Item):

Title=scrapy.Field()
Link=scrapy.Field()
Comments=scrapy.Field()
Words=scrapy.Field()

最佳答案

使用项目管道是过滤重复项目的最佳方法

 from scrapy.exceptions import DropItem

class FilterDuplicateItemsPipeline(object):

items = set()
configured = False

def process_item(self, item, spider):
if not self.configured:
# TODO:
# Extract items from previous csv
# Add each item to the self.items
self.configured = True

if item not in self.items:
self.items.add(item)
return item
else:
raise DropItem('Duplicate item %s' % item)

您还必须将其添加到 settings.py 上的项目管道列表中:

ITEM_PIPELINES = {
'{your_path}.FilterDuplicateItemsPipeline': 500,
}

编辑:这不是一个好的解决方案。请阅读下面的评论。

关于python - 在 Scrapy 的 csvexports 中使用附加模式导出项目时过滤重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49443320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com