Scrapy:将参数传递给cmdline.execute()

10
我知道如何在命令行运行scrapy蜘蛛时传递参数。但是,当我尝试使用scrapy的cmdline.execute()从脚本中以编程方式运行它时遇到了问题。
我需要传递的参数是之前格式化为字符串的列表,就像这样:
numbers = "one,two,three,four,five"
colors = "red,blue,black,yellow,pink"

cmdline.execute('scrapy crawl myspider -a arg1='+numbers+' -a arg2='+colors)

而蜘蛛是...

    class MySpider(Spider):

        name = "myS"

        def __init__(self, arg1, arg2):
            super(MySpider, self).__init__()

#Rest of the code

然而,当我运行它时,我遇到了这个错误:
  Traceback (most recent call last):
  File "C:/Users/ME/projects/script.py", line 207, in run
    cmdline.execute("scrapy crawl myS -a arg1="+numbers+" -a data="+colors)
  File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 123, in execute
    cmdname = _pop_command_name(argv)
  File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 57, in _pop_command_name
    del argv[i]
TypeError: 'str' object doesn't support item deletion

你有什么想法吗?

操作系统:Windows7; Python版本:2.7.8

2个回答

12

execute()函数需要参数列表而不是字符串。尝试这样做:

cmdline.execute([
    'scrapy', 'crawl', 'myspider',
    '-a', 'arg1='+numbers, '-a', 'arg2='+colors])

5
你是否缺少了 .split() 函数?尝试以下代码并查看结果。
cmdline.execute("scrapy crawl myspider -a arg1="+numbers+" -a arg2=" + colors + "".split())

抱歉,这对我没有起作用。它返回了“TypeError:无法连接'str'和'list'对象”。 - lolog
我遇到了同样的问题,对我来说是由于引号和加号搞混了。修复后,它就正常工作了。 - Shushiro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接