Как передать аргумент ключевого слова командной строки переменной класса в scrapyd? - PullRequest
0 голосов
/ 05 мая 2020

Я работаю над scrapy-проектом. Я хочу знать, как передать аргумент из api-вызова scrapyd в класс паука.

Я хочу передать аргумент ключевого слова (file_path = 'C: \') переменной словаря в моем spider class.

Я пробую следующие два метода, но они не работают.

Метод 1:

class MySpider(scrapy.Spider):
    name = 'MySpider'

    custom_settings = { 'FEED_URI': self.file_path }

Метод 2:

class MySpider(scrapy.Spider):
    name = 'MySpider'

    def __init__(self, file_path ='', **kwargs):
        custom_settings = {
            'FEED_URI' :  file_path + '.json'
        }
        super(MySpider,self).__init__(**kwargs)

Я прочитал документацию . Я изо всех сил старался следовать документу, но не совсем понял.

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Вы можете попробовать следующий простой метод, я знаю, что он работает для настройки AUTOTHROTTLE_ENABLED и DOWNLOAD_DELAY, например, он может работать и для FEED_URI:

curl localhost:6800/schedule.json -d project=MySpider -d spider=MySpider -d setting=FEED_URI=whatever

Проверить последний schedule. json -пример из официальной документации scrapyd , где DOWNLOAD_DELAY установлен на 2.

Кроме того, есть несколько проблем, которые пытаются достичь того же самого. но без использования scrapyd, возможно, они вам пригодятся:
https://github.com/scrapy/scrapy/issues/3900
https://github.com/scrapy/scrapy/issues/2392

Кстати: с Scrapy 2.1. 0 FEED_URI теперь помечено как устаревшее .

0 голосов
/ 05 мая 2020

Чтобы получить доступ к аргументам командной строки в python, вам нужно перечислить более sys.argv

Например:

import sys
for arg in sys.argv:
    print(arg)

Затем запустите сценарий из cli с аргументом python main.py name=hello

На выходе будет каждый аргумент, заданный через cli, первым аргументом будет имя сценария, каждый аргумент в этом списке будет строкой,

Чтобы избежать ручного анализа аргументов, вы можете используйте пакет python argparse

...