我在一个抓取程序中有多个蜘蛛,我试图同时从脚本中运行所有蜘蛛,然后将内容转储到 JSONfile 中。当我在每个蜘蛛上使用外壳并执行 -o xyz.json 时,它工作正常。
我试图在这里遵循这个相当彻底的答案: 如何创建自定义 Scrapy Item Exporter?
但是当我运行该文件时,我可以看到它在 shell 中收集数据,但它根本不输出它。
下面我按顺序复制:Exporter、Pipeline、Settings、
出口商:
from scrapy.exporters import JsonItemExporter
class XYZExport(JsonItemExporter):
def __init__(self, file, **kwargs):
super().__init__(file)
def start_exporting(self):
self.file.write(b)
def finish_exporting(self):
self.file.write(b)
我正在努力确定 self.file.write 括号中的内容?
管道:
from exporters import XYZExport
class XYZExport(object):
def __init__(self, file_name):
self.file_name = file_name
self.file_handle = None
@classmethod
def from_crawler(cls, crawler):
output_file_name = crawler.settings.get('FILE_NAME')
return cls(output_file_name)
def open_spider(self, spider):
print('Custom export opened')
file = open(self.file_name, 'wb')
self.file_handle = file
self.exporter = XYZExport(file)
self.exporter.start_exporting()
def close_spider(self, spider):
print('Custom Exporter closed')
self.exporter.finish_exporting()
self.file_handle.close()
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
设置:
FILE_NAME = 'C:\Apps Ive Built\WebScrape Python\XYZ\ScrapeOutput.json'
ITEM_PIPELINES = {
'XYZ.pipelines.XYZExport' : 600,
}
我希望/恐怕这是一个简单的遗漏,因为这似乎是我的 MO,但我对抓取非常陌生,这是我第一次尝试这样做。
如果有更稳定的方法来导出这些数据,我会全力以赴,否则你能告诉我我错过了什么,那就是阻止数据被导出?或阻止出口商被正确调用。
[编辑以更改设置中的管道名称]