Python Xpath没有提取它应该提取的内容
我正在使用Scrapy解析一个网站。这是一种产品 我试图提取产品价格的XPath是:Python Xpath没有提取它应该提取的内容,python,xpath,scrapy,Python,Xpath,Scrapy,我正在使用Scrapy解析一个网站。这是一种产品 我试图提取产品价格的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[@cl
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()
他们都没有工作。有些只是随机的尝试
从中提取产品价格的正确xpath是什么?从外观上看,定价总是包含在id=product\u price的单个div中 它看起来也写得很好,因为在产品页面上没有重复的id=product\u价格 因此,您只需使用:
//div[@id='product_price']/text()
尝试sel.xpath('//div[@id=“product_price”]/text()).extract()时发生了什么?这应该是正确的模式,唯一的区别是我切换了单引号和双引号
这似乎是一个微不足道的变化,但请尝试:
sel.xpath ("//div[@id='product_price']/text()").extract()
这里的问题是价格和大小由javascript函数检索。这就解释了为什么在响应中看不到它,而在浏览器的DOM中看到它。这不是一个具体的问题 由于该网站严重依赖javascript,请浏览页面代码源代码,而不是使用firebug或chrome开发工具检查元素。虽然用scrapy解析这个网站是完全可行的(而且效率更高),但您可以使用支持javascript的Selenium 要获得价格和尺寸,您必须执行两个额外的POST请求
,具有以下参数: 尺寸: ACTION=CheckInventoryforSizes&ProductID=2060&VariantID=2060&Sizes=&ChosenColor=FFFFFF-Multi&isProductDetails=true 价格:
ACTION=GetProductPrice&ProductID=2060&VariantID=2060&ChosenSize=&ChosenColor=FFFFFF-Multi&View=productdetail为空。它没有收回价格。我知道这很明显,但它仍然没有提取出来。尝试了您建议的更改,但仍然无法提取价格。谢谢。你的浏览器上有控制台吗?我刚刚试过这个,而且效果很好,所以我想这可能是个棘手的问题。在浏览器控制台中尝试此操作:$x(“//div[@id='product\u price']]/text()”+1。也就是说,我可能会使用直接针对PhantomJS编写的JavaScript,而不是将Selenium附加到进程外浏览器的更为重量级的方法。我不是Selenium方面的专家,但我认为可以使用PhantomJS作为Selenium的Web驱动程序。这样,您仍然可以编写python;-)。话虽如此,我还是会用Scrapy来编写代码。当然——只是Selenium+PhantomJS比PhantomJS本身涉及更多的运动部件,这意味着性能、资源使用和调试的简易性;如何打电话取决于人们对使用精心设计的语言的关注程度