【问题标题】:Webscraping prices from willhaben.at using xpath in importxml function in google-sheets在 google-sheets 的 importxml 函数中使用 xpath 从 willhaben.at 抓取价格
【发布时间】:2019-02-11 22:07:12
【问题描述】:

使用 google-sheets 中的 importxml 功能,我试图从这个网站上抓取汽车价格: https://www.willhaben.at/iad/gebrauchtwagen/auto/gebrauchtwagenboerse?CAR_MODEL%2FMODEL=1230&CAR_MODEL%2FMAKE=1018&sort=3 例如,我尝试了很多选项:

1)

//div[@class='info']/span[@class='pull-right']

但我永远无法将价格显示在我的 google 表格中。我得到错误或空结果。 我开始假设该网站具有某种防止刮价格的保护措施。这可能吗?

感谢您的帮助,

【问题讨论】:

    标签: xpath google-sheets-formula


    【解决方案1】:

    不知道该不该叫保护。但是您要提取的价格是动态内容。所以你不能用 XPath 轻松访问它。

    例如,第一辆车的价格“Honda Jazz 1,3i-VTEC Trend”是由脚本生成的:

    <div id='e4b79dff-ede1-496a-8460-ca22374cf998'>&lt;Platzhalter&gt;</div>
    <script>
        var f053143d96c794669bf0a23f42f5486ac = function(value){return base64UTF8Codec.decode(arguments[0])};
        replaceWith(document.getElementById('e4b79dff-ede1-496a-8460-ca22374cf998'), f053143d96c794669bf0a23f42f5486ac('DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InB1bGwtcmlnaHQiPiAxOS45OTAsLSA8L3NwYW4+DQogICAgICAgICAgICA='));
    </script>
    

    在脚本中可以看到值:

     DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InB1bGwtcmlnaHQiPiAxOS45OTAsLSA8L3NwYW4+DQogICAgICAgICAgICA=
    

    ,这是base64编码的字符串。如果你解码它,你会得到:

    <span class="pull-right"> 19.990,- </span>
    

    ,其中包含价格。

    所以如果你想从这个网站提取汽车价格,你可能需要写Google Apps Script


    此类 Apps 脚本示例:

    function decodeElement(encoded) {
      var bytes = Utilities.base64Decode(encoded);
      var blob = Utilities.newBlob(bytes);
      return blob.getDataAsString();
    }
    
    function extractEncodedElement(scriptStr) {
      var rgx = new RegExp(".*'([^']+)'\\)\\);");
      return rgx.exec(scriptStr)[1];
    }
    
    function extractPrice(scriptStr) {
      var encoded = extractEncodedElement(scriptStr);
      var decoded = decodeElement(encoded);
      var xml = XmlService.parse(decoded);
      return xml.getRootElement().getText();
    }
    
    function extractPrices(strs) {
      var result = [];
      for (i = 0; i < strs.length; i++) {
        result.push(extractPrice(strs[i]));
      }
      return result;
    }
    

    因此,保存此脚本后,您可以在单元格的电子表格中使用它:

    =extractPrices(IMPORTXML("your_link_here", "//div[@class='info']/script"))
    

    它将返回一系列价格。 extractPrices 迭代来自 IMPORTXML 的结果并提取每个结果的价格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多