我使用Scrapy,我想在2台服务器中导出项目。
我用
scrapy crawl spiderName -s FEED_URI=ftp://usr:pass@host:port/path/to/folder-ftp/allITems.csv
适用于一个 FEED_URI ,但我需要将结果存储在两个不同的服务器中,我尝试过:
scrapy crawl spiderName -s FEED_URI=ftp://usr:pass@host:port/path/to/folder-ftp/allITems.csv -s FEED_URI=ftp://usr2:pas2s@host2:port2/path/to/folder-ftp/allITems.csv
但它存储在第二个。如何在2台服务器中导出结果?
谢谢,
答案 0 :(得分:1)
默认情况下不支持此功能,但可以通过扩展默认FeedExporter
扩展名来完成:
class FeedExporter(object):
def __init__(self, settings):
self.settings = settings
self.urifmt = settings['FEED_URI']
if not self.urifmt:
raise NotConfigured
您可以使用settings['FEED_URI'].split(';')
之类的内容从该配置字段中提取FEED_URIS
列表。然后用循环替换self.urifmt
的每个用法。例如:
def open_spider(self, spider):
uri = self.urifmt % self._get_uri_params(spider)
会变成:
def open_spider(self, spider):
for urifmt in self.uriftms:
uri = urifmt % self._get_uri_params(spider)
# Rest of the code here
最后,不要忘记禁用默认导出器扩展并启用新扩展程序:
EXTENSIONS = {
'scrapy.extensions.feedexport.FeedExporter': None,
'{your_project}.{path_to_exporter_file}.{exporter_name}': 1,
}