Python Scrapy:与XmlItemExporter一起使用FTP
我编写了一个自定义管道来获取我想要的节点名称:Python Scrapy:与XmlItemExporter一起使用FTP,python,scrapy,Python,Scrapy,我编写了一个自定义管道来获取我想要的节点名称: class XmlExportPipeline(object): def __init__(self): self.files = {} @classmethod def from_crawler(cls, crawler): pipeline = cls() crawler.signals.connect(pipeline.spider_opened, signal
class XmlExportPipeline(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('crawl.xml', 'w',encoding='utf-8')
self.files[spider] = file
self.exporter = XmlItemExporter(file,item_element='job', root_element='jobs', indent=1)
self.exporter.start_exporting()
def spider_closed(self, spider):
self.exporter.finish_exporting()
file = self.files.pop(spider)
file.close()
self.uploadftp(spider)
def process_item(self, item, spider):
self.exporter.export_item(item)
return item
现在,我不知道如何使用FTP而不是本地存储进行导出。要更改项目数据,管道非常有用。而且确实存在一些出口用例,在这些用例中它们也是有意义的(例如) 但是,要更改输出格式,最好实现自定义提要导出器,在中注册并在中启用它 关于创建自定义提要导出器,没有详细的文档,但是如果您查看了它的实现,您应该能够解决问题
事实上,查看您的代码,您可能只需要子类化,更改其
\uuuu init\uuuu
方法以将item\u element='job',root\u element='jobs'
传递给父级\uu init\uuuu
,并使用设置定义所需的缩进(1
)。您知道吗?如果是这样的话,是什么阻止您使用它们进行FTP导出?我确实知道提要导出,但我想用自定义节点/根名称格式化xml,然后internet告诉我使用自定义管道来代替。将来,所有这些都可以使用。