我试图榨取这个产品的价格
使用以下代码但它返回一个空数组
response.xpath('//*[@id="product-price"]/div/span[2]/text()').extract()
感谢任何帮助,谢谢。
答案 0 :(得分:1)
因为站点是动态的(这是我在scrapy shell中使用view(response)
命令时得到的:
如您所见,价格信息没有出来。
解决方案: 飞溅 2. selenium + phantomJS
检查此答案可能也有帮助:Empty List From Scrapy When Using Xpath to Extract Values
答案 1 :(得分:1)
稍后由浏览器添加价格,该浏览器使用在html中找到的javascript代码呈现页面。如果您在浏览器中禁用了javascript,您会注意到该页面看起来会有所不同。另外,请查看页面源代码,通常是未更改的,以查看您正在查找的代码(尚未)。
Scrapy不执行任何JavaScript代码。它接收普通的html,这就是你必须使用的东西。
如果你想从浏览器中看起来与浏览器相同的页面中提取数据,我建议使用像Splash这样的无头浏览器(如果你已经在使用scrapy):https://github.com/scrapinghub/splash 您可以通过programaticaly告诉它下载您的页面,渲染它并选择您感兴趣的数据点。
另一种方法是检查向Asos API发出的请求产品数据的请求。在您的情况下,对于此产品: http://www.asos.com/api/product/catalogue/v2/stockprice?productIds=9065343¤cy=AUD&keyStoreDataversion=0ggz8b-4.1&store=AU
通过查看开发者工具(在Google Chrome上)中找到的XMLHttpRequest (XHR)
标签中发送的所有Network
请求,我得到了这个网址。
答案 2 :(得分:0)
您可以尝试在HTML中找到JSON(使用正则表达式)并解析它:
json_string = response.xpath('//script[contains(., "function (view) {")]/text()').re_first( r'view\(\'([^\']+)' )
data = json.loads(json_string)
price = data["price"]["current"]