使用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=‘向右拉’
但是我从来不能把价格放到我的谷歌工作表上。我要么得到错误,要么得到空的结果。我开始认为这个网站有某种保护措施,防止价格被刮掉。这有可能吗?
谢谢你的帮助
发布于 2019-02-12 16:01:41
不知道该不该称之为保护。但是你想提取的价格是动态的内容。所以你不能很容易地用XPath访问它。
例如,第一辆汽车"Honda Jazz 1,3i-VTEC Trend“的价格由脚本生成:
<div id='e4b79dff-ede1-496a-8460-ca22374cf998'><Platzhalter></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的结果并提取每个结果的价格。
https://stackoverflow.com/questions/54639884
复制相似问题