- 您想知道以下情况的原因。
-
=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","//h2") 返回#N/A Imported content is empty。
-
=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","*") 返回内容。
如果我的理解是正确的,那么这个答案呢?
问题:
当我看到http://www.ilgiornale.it/autore/franco-battaglia.html的HTML数据时,我注意到它的错误点。如下。
window.jQuery || document.write("<script src='/sites/all/modules/jquery_update/replace/jquery/jquery.min.js'>\x3C/script>")
在这种情况下,脚本标签不会像\x3C/script> 那样关闭。似乎当 IMPORTXML 检索到这一行时,脚本选项卡没有关闭。我可以确认,当\x3C 转换为< 时,=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","//h2") 正确返回了h2 标签的值。
由此看来,=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","//h2") 返回#N/A Imported content is empty 的问题出现了。
关于=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","*")返回内容的原因,我放这个公式的时候,找不到脚本选项卡的值。从这种情况来看,我认为脚本标签可能有问题。所以我可以找到上面的错误点。我可以确认,当\x3C 转换为< 时,=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","*") 返回的值包括脚本标签的值。
解决方法:
为了避免上述问题,需要将\x3C修改为<。那么下面的解决方法呢?在这些变通方法中,我使用了 Google Apps 脚本。请将这些解决方法视为几种解决方法中的两种。
模式一:
在这个模式中,首先从 URL 下载 HTML 数据,并修改错误点。然后,将修改后的 HTML 数据创建为文件,并共享该文件。并检索文件的 URL。使用此 URL 检索值。
示例脚本:
function myFunction() {
var url = "http://www.ilgiornale.it/autore/franco-battaglia.html";
var data = UrlFetchApp.fetch(url).getContentText().replace(/\\x3C/g, "<");
var file = DriveApp.createFile("htmlData.html", data, MimeType.HTML);
file.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
var endpoint = "https://drive.google.com/uc?id=" + file.getId() + "&export=download";
Logger.log(endpoint)
}
- 使用此脚本时,首先请运行
myFunction() 的函数并检索端点。作为测试用例,请将端点放在单元格“A1”。并将=IMPORTXML(A1,"//h2") 放入单元格“A2”。这样,可以检索值。
模式2:
在此模式中,标签h2 的值通过解析HTML 数据直接检索,并将它们放入活动的电子表格中。
示例脚本:
function myFunction() {
var url = "http://www.ilgiornale.it/autore/franco-battaglia.html";
var data = UrlFetchApp.fetch(url).getContentText().match(/<h2[\s\S]+?<\/h2>/g);
var xml = XmlService.parse("<temp>" + data.join("") + "</temp>");
var h2Values = xml.getRootElement().getChildren("h2").map(function(e) {return [e.getValue()]});
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange(sheet.getLastRow() + 1, 1, h2Values.length, 1).setValues(h2Values);
Logger.log(h2Values)
}
- 当您运行脚本时,标签
h2 的值会直接放入活动电子表格中。
参考资料:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。