在Google-sheets中使用importxml函数中的xpath从willhaben.at网站获取价格

时间:2019-02-11 22:07:13

标签: xpath google-sheets-importxml

在Google表格中使用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工作表中。我收到错误或结果为空。 我开始假设该网站具有某种防止报废价格的保护措施。有可能吗?

感谢帮助,

1 个答案:

答案 0 :(得分:0)

不知道是否称其为保护。但是您要提取的价格是动态内容。因此,您无法使用XPath轻松访问它。

例如,第一辆汽车“ <本田”爵士本田1,3i-VTEC趋势”的价格由以下脚本生成:

<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"))

它将返回您一系列的价格。 extractPricesIMPORTXML的结果进行迭代,并为每个结果提取价格。