2015-02-05 12 views
6

Ich weiß, wie Argumente übergeben werden, wenn Sie einen Scrapy Spider von der Befehlszeile aus ausführen. Jedoch habe ich Probleme, wenn ich versuche, es programmatisch aus einem Skript mit scrapys cmdline.execute() auszuführen.Scrapy: Argumente an cmdline.execute() übergeben

Die Argumente, die ich brauchen, sind Listen zu übergeben, die ich zuvor als Strings formatiert, wie folgt aus:

numbers = "one,two,three,four,five" 
colors = "red,blue,black,yellow,pink" 

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

und die Spinne ist ...

class MySpider(Spider): 

     name = "myS" 

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

#Rest of the code 

Allerdings, wenn ich es laufen Ich erhalte diesen Fehler:

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 

Irgendwelche Ideen?

Betriebssystem: Windows7; Python-Version: 2.7.8

Antwort

7

Die execute()-Funktion erwartet eine Liste von Argumenten, keine Zeichenfolge. Versuchen Sie folgendes:

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

Es hat funktioniert! Danke für die schnelle Antwort. – pylund

2

Vermissen Sie die .split()? versuchen Sie Folgendes und sehen Sie, was passiert.

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

Sorry, das hat nicht für mich funktioniert. Es gab "TypeError: conneatenate 'str' und 'list' Objekte" – pylund

+1

Ich habe es bearbeitet, jetzt sollte es funktionieren – VinGarcia