Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Xpath没有提取它应该提取的内容_Python_Xpath_Scrapy - Fatal编程技术网

Python 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

我正在使用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[@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本身涉及更多的运动部件,这意味着性能、资源使用和调试的简易性;如何打电话取决于人们对使用精心设计的语言的关注程度