另一个IMPORTXML返回空内容

时间:2019-09-22 13:07:39

标签: google-sheets-importxml

输入时

#N/A Imported content is empty

在我的Google表格中,我得到:=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","*")

但是,当我输入时:

h2

我得到了一些内容,因此我可以假定对该页面的访问没有被阻止。

毫无疑问,该页面包含几个didDeselectRowAt标签。

那是什么问题?

1 个答案:

答案 0 :(得分:1)

  • 您想知道以下情况的原因。
    • =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脚本。请考虑这些变通办法只是几种变通办法中的两个。

模式1:

在这种模式下,首先,从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:

在这种模式下,通过解析HTML数据并将其放置到活动电子表格中,可以直接检索标记h2的值。

示例脚本:
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的值将直接放置到活动电子表格中。

参考:

如果我误解了您的问题,而这不是您想要的方向,我深表歉意。