Как правильно хранить очищенные данные на 2 серверах с помощью Scrapy? - PullRequest
0 голосов
/ 03 мая 2018

Я использую Scrapy и хочу экспортировать предметы на 2 сервера.

Я использую

scrapy crawl spiderName -s FEED_URI=ftp://usr:pass@host:port/path/to/folder-ftp/allITems.csv

это работает для одного FEED_URI , но мне нужно сохранить результаты на 2 разных серверах, я пробовал:

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 голосов
/ 04 мая 2018

Это не поддерживается по умолчанию, но это можно сделать, расширив расширение 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,
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...