gpt4 book ai didi

csv - scrapy如何将项目导出为每个项目单独的csv文件

转载 作者:行者123 更新时间:2023-12-02 05:21:16 25 4
gpt4 key购买 nike

我正在抓取一个足球网站,蜘蛛(单个蜘蛛)从网站页面获取多种项目:球队、比赛、俱乐部等。我正在尝试使用 CSVItemExporter 将这些项目存储在单独的 csv 文件中,team.csv、matches.csv、clubs.csv 等

我不确定什么是正确的方法。到目前为止我想到的唯一方法是创建我自己的自定义管道,如示例中所示 http://doc.scrapy.org/en/0.14/topics/exporters.html并在spider_opened方法中打开所有需要的csv文件,即为每个csv文件创建一个csv导出器,并在process_item中放置代码来找出“item”参数是什么类型的项目,然后将其发送到相应的导出器对象。

无论如何,我还没有找到任何在 scrapy 中处理多个 csv 文件(每个项目类型)的示例,所以我担心我正在以不应该使用的方式使用它。 (这是我第一次使用 Scrapy)。

迪奥梅德斯

最佳答案

我在这里发布了我用来根据上面 drcolossos 的答案生成 MultiCSVItemPipeline 的代码。

此管道假定所有 Item 类都遵循 *Item 约定(例如 TeamItem、EventItem),并创建 team.csv、event.csv 文件并将所有记录发送到相应的 csv 文件。

from scrapy.exporters import CsvItemExporter
from scrapy import signals
from scrapy.xlib.pydispatch import dispatcher


def item_type(item):
return type(item).__name__.replace('Item','').lower() # TeamItem => team

class MultiCSVItemPipeline(object):
SaveTypes = ['team','club','event', 'match']
def __init__(self):
dispatcher.connect(self.spider_opened, signal=signals.spider_opened)
dispatcher.connect(self.spider_closed, signal=signals.spider_closed)

def spider_opened(self, spider):
self.files = dict([ (name, open(CSVDir+name+'.csv','w+b')) for name in self.SaveTypes ])
self.exporters = dict([ (name,CsvItemExporter(self.files[name])) for name in self.SaveTypes])
[e.start_exporting() for e in self.exporters.values()]

def spider_closed(self, spider):
[e.finish_exporting() for e in self.exporters.values()]
[f.close() for f in self.files.values()]

def process_item(self, item, spider):
what = item_type(item)
if what in set(self.SaveTypes):
self.exporters[what].export_item(item)
return item

关于csv - scrapy如何将项目导出为每个项目单独的csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12230332/

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