0
因此,我有一個抓取頁面的蜘蛛,爲它遇到的每個項目收集數據。如果該項目沒有選項,則只需將該項目沿管道發送。如果有選項,它將彙編一個選項列表列表,併爲每個唯一的選項組合發送一個請求(作爲HTML代碼片段返回,所以我把它當作XML處理)。對於每個選項組合,它提取項目的價格並將其發送到管道。只有它沒有。Scrapy:爲抓取頁面中的選項選擇創建多個項目
下面是一些代碼:
#spider code above here that does all the normal stuff,
#plus gets and organize all options. Then this:
for optLists in uberList:
queryString = '?func=Options¤tOption=1&Modal=False&AddUniqueID=False&sku=' + sku + '&option1=' + optLists[0] + '&option2=' + optLists[1] + '&option3=' + optLists[2]
reqURL = urljoin(baseAjaxURL, queryString)
req = Request(url=reqURL,
callback=self.parse_ajax,
meta = {'item' : item},
)
self.log('simplified item: ' + reqURL, level=log.DEBUG)
yield req
而且回調函數:
def parse_ajax(self, response):
print 'parsing ajax'
xxs = XmlXPathSelector(response)
item = response.meta['item']
item['price'] = xxs.select("normalize-space(substring-before(substring-after(.//skuMainPrice/text(), 'ppPrice:'),'/span'))").extract()[0]
print 'parse_ajax price: ', item['price']
return item
的在第一種方法火災循環正常,一旦每組選項。如果回調是不存在的方法(這很好),那麼Request會拋出一個錯誤,但回調方法中的print語句不會觸發,也不會將該項傳播到管道中。
任何意見我做錯了什麼或如何做到這一點正確的將不勝感激。
感謝
通常當請求失敗時會發生此行爲,因此不會調用回調函數。你可以驗證AJAX網址的請求是否正確? –
我已經打印出reqURL並在Firefox中跟隨鏈接。這給了我預期的HTML片段。 – GMBill
你也可以驗證Scrapy處理200 OK的請求嗎? –