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