2016-04-02 77 views
0

我面臨與parse_node方法中的一些問題Scrapy:Scrapy parse_node()到底需要3個參數(2給出)

class s1(scrapy.spiders.XMLFeedSpider): 
name = "s1" 
handle_httpstatus_list = [400,401,403,404,408,410,500,502,503,504] 
allowed_domains = ["xxx"] 
start_urls = ["xxx"] 
main_url = start_urls[0] 
jobs_list = [] 
tracker = SummaryTracker() 
itertag = "miojob" 
counter = 0 


def parse_node(self, response, node): 
    if response.status in [400,401,403,404,408,410,500,502,503,504]: 
     time.sleep(60) 
     yield scrapy.Request(self.main_url, callback=self.parse_node, errback=self.err1, dont_filter = True) 
    else: 
    #Some Code # 
     yield scrapy.Request(self.main_url, callback=self.parse_node, errback=self.err1, dont_filter = True) 

這是一個scrapy-BOT是遞歸刮同一頁面的部分提取最後十個項目。一切正常,除了最後scrapy.Request,因爲它給了我這個錯誤: 「parse_node()到底需要3個參數(2給出)」 相反,如果我用一個簡單Request(self.main_url)它的工作原理,但我不能使用errback可因爲它需要回調。我試圖通過額外的參數parse_node這樣的:

yield scrapy.Request(self.main_url, callback=self.parse_node(arg1,arg2), errback=self.err1, dont_filter = True) 

,但它給了我一個斷言錯誤,可能是因爲論據是錯誤的?

你有什麼想法如何解決這個問題?通過正確的參數parse_node,我也可以使用errback callable。

+0

回調方法應該只包含2個參數'self'和'response',所以刪除'node' – eLRuLL

+0

@eLRuLL如果我從parse_node中刪除節點會引發類似於舊的錯誤! – 0cN

回答

0

嘗試

def parse_node(self, response): 
<yourcode> 
+0

謝謝,但它沒有奏效! – 0cN

0

我已經解決了問題,通過這裏閱讀源代碼: https://github.com/scrapy/scrapy/blob/master/scrapy/spiders/feed.py

舊的請求,現在是:

yield scrapy.Request(self.main_url, callback=self.parse,errback=self.err1, dont_filter = True) 

這裏的TWEAK是調用解析方法,而不是parse_node,因爲「parse」會將Selector(節點)傳遞給parse_node。

相關問題