另一个返回空内容的 IMPORTXML
another IMPORTXML returning empty content
当我输入
=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","//h2")
在我的 google sheet 中,我得到:#N/A Imported content is empty
。
然而,当我输入:
=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","*")
我得到了一些内容,因此我可以假定对该页面的访问未被阻止。
毫无疑问,该页面包含多个 h2
标签。
那么问题是什么?
- 您想了解以下情况的原因。
=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","//h2")
returns #N/A Imported content is empty
.
=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","*")
returns内容。
如果我的理解是正确的,这个答案怎么样?
问题:
当我看到 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")
正确 returns h2
标签的值。
由此看来,=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","//h2")
returns #N/A Imported content is empty
的问题似乎发生了。
关于=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","*")
returns内容的原因,我在输入这个公式时,找不到脚本选项卡的值。从这种情况来看,我认为脚本标签可能有问题。所以我可以找到上面的错误点。我可以确认当 \x3C
转换为 <
时,=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","*")
returns 值包括脚本标签的值。
解决方法:
为避免上述问题,需要将\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"。通过这个,可以检索值。
模式二:
在此模式中,通过解析 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
的值直接放入活动电子表格。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。
当我输入
=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","//h2")
在我的 google sheet 中,我得到:#N/A Imported content is empty
。
然而,当我输入:
=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","*")
我得到了一些内容,因此我可以假定对该页面的访问未被阻止。
毫无疑问,该页面包含多个 h2
标签。
那么问题是什么?
- 您想了解以下情况的原因。
=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","//h2")
returns#N/A Imported content is empty
.=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","*")
returns内容。
如果我的理解是正确的,这个答案怎么样?
问题:
当我看到 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")
正确 returns h2
标签的值。
由此看来,=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","//h2")
returns #N/A Imported content is empty
的问题似乎发生了。
关于=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","*")
returns内容的原因,我在输入这个公式时,找不到脚本选项卡的值。从这种情况来看,我认为脚本标签可能有问题。所以我可以找到上面的错误点。我可以确认当 \x3C
转换为 <
时,=IMPORTXML("http://www.ilgiornale.it/autore/franco-battaglia.html","*")
returns 值包括脚本标签的值。
解决方法:
为避免上述问题,需要将\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"。通过这个,可以检索值。
模式二:
在此模式中,通过解析 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
的值直接放入活动电子表格。
参考文献:
如果我误解了您的问题并且这不是您想要的方向,我深表歉意。