gpt4 book ai didi

python - 使用scrapy导出多种格式的抓取数据

转载 作者:太空狗 更新时间:2023-10-29 23:58:35 26 4
gpt4 key购买 nike

我正在抓取网站以将数据导出为语义格式 (n3)。但是,我还想对该数据进行一些数据分析,因此以 csv 格式更方便。

要获取两种格式的数据我可以做到

scrapy spider -t n3 -o data.n3
scrapy spider -t csv -o data.csv

但是,这会将数据抓取两次,而且我无法承受大量数据。

有没有办法将相同的抓取数据导出为多种格式?(无需多次下载数据)

我发现有一个可以导出为不同格式的抓取数据的中间表示很有趣。但似乎没有办法用 scrapy 做到这一点。

最佳答案

根据我在浏览源代码和文档后的理解,-t option refers to the FEED_FORMAT setting不能有多个值。此外,FeedExporter 内置扩展 ( source ) 仅适用于单个导出器。

实际上,考虑在 Scrapy Issue Tracker 处提出一个功能请求 .

更像是一种解决方法,定义一个管道并开始使用多个导出器进行导出。例如,这里是如何导出为 CSV 和 JSON 格式:

from collections import defaultdict

from scrapy import signals
from scrapy.exporters import JsonItemExporter, CsvItemExporter


class MyExportPipeline(object):
def __init__(self):
self.files = defaultdict(list)

@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):
csv_file = open('%s_products.csv' % spider.name, 'w+b')
json_file = open('%s_products.json' % spider.name, 'w+b')

self.files[spider].append(csv_file)
self.files[spider].append(json_file)

self.exporters = [
JsonItemExporter(json_file),
CsvItemExporter(csv_file)
]

for exporter in self.exporters:
exporter.start_exporting()

def spider_closed(self, spider):
for exporter in self.exporters:
exporter.finish_exporting()

files = self.files.pop(spider)
for file in files:
file.close()

def process_item(self, item, spider):
for exporter in self.exporters:
exporter.export_item(item)
return item

关于python - 使用scrapy导出多种格式的抓取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31032340/

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