如何使用Scrapy将刮下的数据正确存储在2台服务器中?

时间:2018-05-03 14:54:01

标签: python ftp scrapy

我使用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台服务器中导出结果?

谢谢,

1 个答案:

答案 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,
}