2014-07-16 61 views
1

我正在使用Scrapy解析網站。這是一款產品linkXpath不提取它應該提取的內容

,我試圖提取的產品價格上漲的XPath是:

sel.xpath ('//div[@class="product-price"]/input/div[@id="product_price"]/text()').extract() 
sel.xpath ('//div[@id="product_price"]/text()').extract() 
sel.xpath ('//div[@class="product-size-qua-info"]/div[@class="product-price"]/input/div[@id="product_price"]/text()').extract() 
sel.xpath ('//div[@class="product-size-qua-info"]/div/input/div[@id="product_price"]/text()').extract() 
sel.xpath ('//div[@class="product-size-qua-info"]/div/input/div/text()').extract() 
sel.xpath ('//div[@class="product-size-qua-info"]/div/div/text()').extract() 
sel.xpath ('//div[@class="product-size-qua-info"]/div//div/text()').extract() 
sel.xpath ('//div[@class="product-size-qua-info"]/div[2]/text()').extract() 
sel.xpath ('//div[@class="product-size-qua-info"]/div[2]//text()').extract() 
sel.xpath ('//div[@id="product_price"]//text()').extract() 

他們沒有工作。有些只是隨機嘗試。

什麼是從url提取產品價格的正確xpath?

回答

0

從外觀上看,定價總是包含在id = product_price的單個div中。

它看起來也很好寫,有沒有重複的ID產品頁面= PRODUCT_PRICE

可以因此只是簡單地使用:

//div[@id='product_price']/text() 

當你試圖sel.xpath(」發生了什麼// DIV [@ ID = 「PRODUCT_PRICE」] /文本()')。提取物()?這應該是正確的模式,唯一的區別是我切換了我的單引號&雙引號。

這似乎是一個微不足道的變化,但嘗試:

sel.xpath ("//div[@id='product_price']/text()").extract() 
+0

這是一片空白。它沒有檢索價格。我知道這很明顯,但仍然沒有提取它。 嘗試了您所建議的更改,但仍未提取價格。 Thanks to BTW。 –

+1

你的瀏覽器上有控制檯嗎?我剛剛嘗試過這一點,它的工作原理,所以我認爲這可能是一個棘手的問題。在您的瀏覽器控制檯中試試這個:$ x(「// div [@ id ='product_price']/text()」) –

+1

Ya正在工作。 這可能是一個Scrapy問題。 –

1

的這裏的問題是,價格和大小由一個JavaScript函數檢索。這就解釋了爲什麼你沒有在響應中看到它,但是你在瀏覽器的DOM中看到它。這不是一個特定於scrapy的問題。

由於本網站嚴重依賴於JavaScript,瀏覽頁面代碼源代替使用螢火蟲或鉻開發人員工具檢查元素。儘管使用scrapy解析本網站是完全可行的(並且更高效),但您可以使用支持JavaScript的Selenium。

要獲得價格和規模,必須執行兩個額外的POST請求
http://www.goodearth.in/Wishlist.ashx,具有下列參數:

大小: ACTION = CheckInventoryforSizes &的ProductID = 2060 & VariantID = 2060 &大小= & ChosenColor = FFFFFF-多& isProductDetails =真

價格: ACTION = GetProductPrice &的ProductID = 2060 & VariantID = 2060 & ChosenSize = & ChosenColor = FFFFFF-多&查看=產品詳情

+0

+1。也就是說,我可能會使用直接針對PhantomJS編寫的JavaScript,而不是使用Selenium附加到進程外瀏覽器的更重量級方法。 –

+0

我並不是Selenium的專家,但我認爲你可以使用PhantomJS作爲硒的網絡驅動程序。這樣你仍然可以寫python ;-)。說了這些,我會用Scrapy編碼。 –

+0

當然 - Selenium + PhantomJS只包含比PhantomJS更多的移動部件,所有這些都意味着性能,資源使用以及調試的簡易性;如何打電話取決於使用精心設計的語言有多少關心。 :) –