在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工作表中。我收到错误或结果为空。 我开始假设该网站具有某种防止报废价格的保护措施。有可能吗?
感谢帮助,
答案 0 :(得分:0)
不知道是否称其为保护。但是您要提取的价格是动态内容。因此,您无法使用XPath轻松访问它。
例如,第一辆汽车“ <本田”爵士本田1,3i-VTEC趋势”的价格由以下脚本生成:
<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
的结果进行迭代,并为每个结果提取价格。