【问题标题】:Python - Scrapy ecommerce websitePython - Scrapy 电子商务网站
【发布时间】:2025-05-24 09:15:01
【问题描述】:

我正在尝试刮掉这个产品的价格

http://www.asos.com/au/fila/fila-vintage-plus-ringer-t-shirt-with-small-logo-in-green/prd/9065343?clr=green&SearchQuery=&cid=7616&gridcolumn=2&gridrow=1&gridsize=4&pge=1&pgesize=72&totalstyles=4699

使用以下代码但它返回一个空数组

response.xpath('//*[@id="product-price"]/div/span[2]/text()').extract()

感谢您的帮助。

【问题讨论】:

    标签: python web-scraping scrapy


    【解决方案1】:

    因为站点是动态的(这是我在scrapy shell中使用view(response)命令时得到的: 如您所见,价格信息没有出来。

    解决方案: 1. 飞溅。 2. selenium+phantomJS

    检查这个答案也可能会有所帮助:Empty List From Scrapy When Using Xpath to Extract Values

    【讨论】:

      【解决方案2】:

      价格稍后由浏览器添加,该浏览器使用 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&currency=AUD&keyStoreDataversion=0ggz8b-4.1&store=AU

      我通过查看开发者工具(在 Google Chrome 上)中的 Network 选项卡中发送的所有 XMLHttpRequest (XHR) 请求获得了这个 URL。

      【讨论】:

        【解决方案3】:

        您可以尝试在 HTML 中查找 JSON(使用正则表达式)并解析它:

        json_string = response.xpath('//script[contains(., "function (view) {")]/text()').re_first( r'view\(\'([^\']+)' )
        
        data = json.loads(json_string)
        price = data["price"]["current"]
        

        【讨论】: