如何解决解析HTML时的错误

How to solve error while parsing HTML

本文关键字:HTML 错误 何解决 解决      更新时间:2023-09-26

我正试图使用从谷歌电子表格中的网页中获取元素

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)的方法适用于其他网站,比如维基百科。正如你在这里看到的。

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);
};

XMLService服务只能使用100%正确的XML内容。它不能容忍错误。谷歌应用程序脚本曾经有一个名为XML服务的容忍服务,但它已被弃用。然而,它仍然有效,您可以使用它,如下所述:GAS-XML

从技术上讲,HTML和XHTML是不一样的。请参阅XHTML和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页面一起工作,或者将网页源码直接作为文本文件处理。

相关问题:

  • 如何在不使用XmlService的情况下解析Google Apps脚本中的HTML字符串
  • 在谷歌应用程序脚本中解析html的最佳方式是什么

尝试用itemscope = '':替换itemscope

function pegarAsCoisas() {
  var html = UrlFetchApp.fetch("http://www.saosilvestre.com.br").getContentText();
  html = replace("itemscope", "itemscope = ''");
  var elements = XmlService.parse(html);                 
}

有关更多信息,请查看此处。