首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在google-sheets的importxml函数中使用xpath从willhaben.at上抓取价格

在google-sheets的importxml函数中使用xpath从willhaben.at上抓取价格
EN

Stack Overflow用户
提问于 2019-02-12 06:07:13
回答 1查看 222关注 0票数 2

使用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=‘向右拉’

但是我从来不能把价格放到我的谷歌工作表上。我要么得到错误,要么得到空的结果。我开始认为这个网站有某种保护措施,防止价格被刮掉。这有可能吗?

谢谢你的帮助

EN

回答 1

Stack Overflow用户

发布于 2019-02-12 16:01:41

不知道该不该称之为保护。但是你想提取的价格是动态的内容。所以你不能很容易地用XPath访问它。

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

代码语言:javascript
复制
<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>

在脚本中,您可以看到该值:

代码语言:javascript
复制
 DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InB1bGwtcmlnaHQiPiAxOS45OTAsLSA8L3NwYW4+DQogICAgICAgICAgICA=

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

代码语言:javascript
复制
<span class="pull-right"> 19.990,- </span>

,其中包含价格。

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

这样的Apps脚本示例:

代码语言:javascript
复制
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;
}

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

代码语言:javascript
复制
=extractPrices(IMPORTXML("your_link_here", "//div[@class='info']/script"))

它将返回一组价格。extractPrices遍历来自IMPORTXML的结果并提取每个结果的价格。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54639884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档