2013-12-09 70 views
7

爲幻想團隊創建一個刮板。尋找一種方法來傳遞玩家名稱列表作爲參數,然後對於player_list中的每個player_name運行解析代碼。Scrapy:如何通過命令提示符將參數列表傳遞給蜘蛛?

我現在有這樣的事情

class statsspider(BaseSpider): 
name = 'statsspider' 

def __init__ (self, domain=None, player_list=""): 
    self.allowed_domains = ['sports.yahoo.com'] 
    self.start_urls = [ 
     'http://sports.yahoo.com/nba/players', 
    ] 
    self.player_list= "%s" % player_list 


def parse(self, response): 
    example code 
    yield request 

我假設輸入的參數列表是相同的通過命令行只是一個參數,因此我進入這樣的事情:

scrapy crawl statsspider -a player_list=['xyz','abc'] 

問題2!

通過輸入一個逗號分隔的參數列表,像這樣

scrapy crawl statsspider -a player_list="abc def,ghi jkl" 

我現在想通過每一個「名稱」解決的第一個問題(即「ABC DEF」)找到的第一個初步的姓氏(在這種情況下是'd')。

我使用的代碼

array = [] 
for player_name in self.player_list: 
    array.append(player_name) 
print array 

而我最終的結果[ 「'」, 'A', 'B', 'C',...等]爲什麼不蟒將player_name分配給每個'名字'(例如'abc def'和'ghi jkl')?有人可以向我解釋這個邏輯嗎,我可能會理解事後做正確的做法!

+0

只是給它一個嘗試,它並沒有給Ubuntu上的錯誤,scrapy版本0.18.4,你運行的是什麼版本? –

+0

我意識到我通過命令行錯誤地傳遞了參數。請參閱下面的@kev答案!但現在我堅持一個新問題 –

回答

12

Shell參數是基於字符串的。你需要在代碼中解析arg。

命令行:

scrapy crawl statsspider -a player_list=xyz,abc 

Python代碼:

self.player_list = player_list.split(',') 
+0

嘿@kev感謝您的答覆!我現在知道如何將列表傳遞到命令行。它的工作原理,但現在我有一個新的問題,我不明白python的邏輯。如果你能看到附加的「問題2」,將不勝感激! –

+0

沒關係解決了這個問題! –

相關問題