我想从以下站点获取数据:https : //www.portaldefinancas.com/framecdi.htm
我正在使用带有 IMPORTXML 函数的谷歌表。我对 xpath 有了一些了解,我相信我的问题不是语法。
问题是该网站似乎不希望人们从中获取数据。
我需要从源代码中得到的一段代码如下:
... </fieldset><div class="column50"><script src="js-gen-ctb/tb-tb.js"></script>
Taxas CDI - Mensal - Anual - Acumulada - 2021
<script src="js-tx-ctb/th-cdib.js"></script>
<script src="js-tx/cdib-2021.js"></script> ...
如您所见,在数据应该出现的确切位置有很多脚本。当我访问这些脚本时,它们内部唯一的东西是一段 document.write 代码,如下所示:
document.write(""),document.write('<table cellspacing="1" cellpadding="3" id="tb"><caption><p class="cp">');
这些脚本的唯一功能是将源代码分成不同文件的多个部分。
这样,我无法访问数据,因为函数 IMPORTXML 返回 #NA 错误,因为数据在源代码之外。
在这种情况下,有什么方法可以使用函数 IMPORTXML 获取数据?如何使用此公式访问 .js 文件中的数据?
谢谢
可以通过解析js文件中html表的内容来获取数据,如下
function getTaxas(url) {
var source = UrlFetchApp.fetch(url).getContentText()
source = source.split('document')[2]
var table = '<table><tr><td' + source.match(/(?<=td).*(?=td)/g) + 'td></tr></table>'
var doc = XmlService.parse(table);
var rows = doc.getDescendants().filter(function(c) {
var element = c.asElement();
return element && element.getName() == "tr";
});
var data = rows.slice(0).map(function(row) {
return row.getChildren("td").map(function(cell) {
return cell.getValue();
});
});
return data;
}
https://docs.google.com/spreadsheets/d/18yhDYr91ORrofV20FMWYmYnwwnGK0QaQguG9uLdP5co/copy
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句