如何在scrapyd中向类变量传递命令行关键字参数?

问题描述 投票:0回答:1

我正在做一个scrapy项目。我想知道如何从scrapyd的api调用中传递一个参数到spider类中。

我想把关键字参数(file_path='C:\')传给我的spider类中的字典变量。

我尝试了以下两种方法,但都没有成功。

方法1:将关键字传给我的spider类,我尝试了以下两种方法,但都没有成功。

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)

我已经读到了 文件. 我尽力按照文档的要求去做,但我并没有完全明白这个想法。

python scrapy scrapyd
1个回答
0
投票

在Python中访问命令行参数,你需要枚举超过 sys.argv

比如说。

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

然后从cli运行这个脚本,参数是python main.py name=hello

输出将是通过 cli 给出的每个参数,第一个 arg 是脚本名称,这个列表中的每个参数将是一个 String。

为了避免手动解析参数,你可以使用python包里的 argparse


0
投票

你可以试试下面的简单方法,我知道它对设置 AUTOTHROTTLE_ENABLEDDOWNLOAD_DELAY 例如,它可能适用于 FEED_URI 也是。

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

检查上一个schedule.js-example,来自于 刮刮乐官方文档 其中 DOWNLOAD_DELAY 被设置为2。

除此之外,还有多个问题试图实现完全相同的事情,但没有scrapyd参与,也许它们对你有帮助。https:/github.comscrapyscrapyissues3900。 https:/github.comscrapyscrapyissues2392。

顺便说一下:随着Scrapy 2.1.0的推出 FEED_URI 现在被标记为 弃用.

© www.soinside.com 2019 - 2024. All rights reserved.