2014-07-16 43 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更多的移动部件,所有这些都意味着性能,资源使用以及调试的简易性;如何打电话取决于使用精心设计的语言有多少关心。 :) –