2015-11-28 49 views
1

我想要使用篩選選項來取消包含comobobox的網頁。 基地址相同,但請求負載取決於選定的組合框值。我有一個可用的選項列表,我創建了一個遍歷組合框值並執行請求的循環。代碼如下:循環中的Scrapy調用請求

def parse_product_lines(self, response): 
    options = json.loads(response.body_as_unicode()) 
    product_lines = options['products'] 

    for product_line in product_lines: 
     payload = self.prepare_payload(product_line) 

     scrapy.Request('http://example.com', 
         method="POST", 
         body=urllib.urlencode(payload), 
         callback=self.parse_items) 

def parse_items(self, response): 
    print response 

,但請求未被執行。有人知道那裏發生了什麼嗎?

+0

在循環結束時,我添加了return語句,一切都開始工作。 – tomgal

回答

3

首先,Spider類的使用方法parse默認情況下。

每個回調應返回Itemdict或迭代器。

您應該在parse_product_lines方法中用yield request告訴scrapy接下來要處理的方法。

2

Scrapy不會等待Request完成(與其他請求庫一樣),它會以異步方式調用請求。

這些請求(和項目)由每個處理這些請求(回調)的方法通過產生它們來處理,因爲scrapy將這些方法作爲generators,並檢查它們是否爲項目或請求,返回項目並調度請求稍後按其callback參數中指定的方法處理。

所以不要只是打電話Request,但yield Request安排scrapy。