我正在尝试使用以下网址从Google电子表格中的网页获取元素:
function pegarAsCoisas() {
var html = UrlFetchApp.fetch("http://www.saosilvestre.com.br").getContentText();
var elements = XmlService.parse(html);
}
但是我一直在记错:
第2行出错:与元素类型“html”关联的属性名称“itemscope”必须后跟“=”字符。 (第4行,文件“”)
我该如何解决这个问题?我想从这个网站获取H1文本,但对于其他网站,我必须选择其他元素。
我知道方法XmlService.parse(html)
适用于其他网站,例如维基百科。正如您所见here。
答案 0 :(得分:3)
html
不是xml。而且您不需要尝试解析它。您需要使用字符串方法:
function pegarAsCoisas() {
var urlFetchReturn = UrlFetchApp.fetch("http://www.saosilvestre.com.br");
var html = urlFetchReturn.getContentText();
Logger.log('html.length: ' + html.length);
var index_OfH1 = html.indexOf('<h1');
var endingH1 = html.indexOf('</h1>');
Logger.log('index_OfH1: ' + index_OfH1);
Logger.log('endingH1: ' + endingH1);
var h1Content = html.slice(index_OfH1, endingH1);
var h1Content = h1Content.slice(h1Content.indexOf(">")+1);
Logger.log('h1Content: ' + h1Content);
};
答案 1 :(得分:1)
XMLService 服务仅适用于100%正确的XML内容。它不容错。谷歌应用程序脚本曾经有一个称为 XML 服务的容忍服务,但已被弃用。但是,它仍然有效,您可以使用它,如下所述:GAS-XML
答案 2 :(得分:1)
技术上HTML和XHTML不一样。见What are the main differences between XHTML and HTML?
关于OP代码,以下工作正常
function pegarAsCoisas() {
var html = UrlFetchApp
.fetch('http://www.saosilvestre.com.br')
.getContentText();
Logger.log(html);
}
正如之前的回答所说,应该使用其他方法,而不是直接在UrlFetchApp返回的对象上使用XmlService。您可以先尝试将网页源代码从HTML转换为XHTML,以便能够使用Xml服务服务(XmlService),使用Xml服务,因为它可以直接使用HTML页面,或处理网页源代码直接作为文本文件。
相关问题:
答案 3 :(得分:-1)
尝试按itemscope
替换itemscope = ''
:
function pegarAsCoisas() {
var html = UrlFetchApp.fetch("http://www.saosilvestre.com.br").getContentText();
html = replace("itemscope", "itemscope = ''");
var elements = XmlService.parse(html);
}
有关详细信息,请查看here。