2015-02-05 25 views
6

So come passare argomenti quando si esegue uno spider scrapy dalla riga di comando. Tuttavia, sto avendo problemi durante il tentativo di eseguirlo in modo programmatico da uno script che usa cmdline.execute() di scrapy.Scrapy: passare argomenti a cmdline.execute()

Gli argomenti che ho bisogno di passare sono le liste che ho precedentemente formattati come stringhe, proprio come questo:

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

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

e il ragno è ...

class MySpider(Spider): 

     name = "myS" 

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

#Rest of the code 

Tuttavia, quando l'eseguo Ho ricevuto questo errore:

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 

Qualche idea?

SO: Windows7; Versione Python: 2.7.8

risposta

7

La funzione execute() prevede un elenco di argomenti, non una stringa. Prova questo:

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

Ha funzionato! Grazie per la risposta rapida. – pylund

2

Ti manca il .split()? prova il seguente e guarda cosa succede.

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

Siamo spiacenti, questo non ha funzionato per me. Ha restituito "TypeError: impossibile concatenare" str "e" lista "oggetti" – pylund

+1

L'ho modificato, ora dovrebbe funzionare – VinGarcia

Problemi correlati