Javascript 解析HTML时如何解决错误

Javascript 解析HTML时如何解决错误,javascript,google-apps-script,web-scraping,html-parsing,Javascript,Google Apps Script,Web Scraping,Html Parsing,我试图通过以下方式从谷歌电子表格中的网页中获取元素: function pegarAsCoisas() { var html = UrlFetchApp.fetch("http://www.saosilvestre.com.br").getContentText(); var elements = XmlService.parse(html); } 然而,我不断地发现错误: 第2行错误:与元素类型“html”关联的属性名“itemscope”必须后跟“

我试图通过以下方式从谷歌电子表格中的网页中获取元素:

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

};
函数pegarAsCoisas(){ var urlFetchReturn=UrlFetchApp.fetch(“http://www.saosilvestre.com.br"); var html=urlFetchReturn.getContentText(); Logger.log('html.length:'+html.length);
var index_of h1=html.indexOf('尝试用
itemscope=''
替换
itemscope


有关更多信息,请参阅。

XMLService服务仅适用于100%正确的XML内容。它不具有容错性。Google apps脚本以前有一个名为XML service的容错服务,但它已被弃用。但是,它仍然有效,您可以使用它,如此处所述:

从技术上讲,HTML和XHTML是不同的。请参阅

关于操作代码,下面的代码可以正常工作

function pegarAsCoisas() {
  var html =  UrlFetchApp
    .fetch('http://www.saosilvestre.com.br')
    .getContentText();
  Logger.log(html);
}
正如在前面的回答中所说,应该使用其他方法,而不是直接在UrlFetchApp返回的对象上使用XmlService。您可以尝试首先将网页源代码从HTML转换为XHTML,以便能够使用Xml服务(XmlService),使用Xml服务,因为它可以直接处理HTML页面,或者直接将web页面源代码作为文本文件处理

相关问题:


我使用的是regex.exec(),但您的方法要简单得多……然而,能够解析HTML会让may的生活变得更轻松,因为我可以在更复杂的页面中按ID、类等进行选择……并且您可以使用XmlService.parse(HTML)解析HTML;有些网页,比如wikipedia,效果很好……我认为要使用DOM方法,你需要将HTML传回前端;这是可以做到的。但是,我也不认为你需要解析它。如果你知道在
.gs
服务器端代码中选择ID、类等的方法,让我知道怎么做。2017年3月开始工作!
indexOf
允许调整搜索起点。有关的详细信息。此代码返回:ReferenceError:“replace”未定义。(第3行,文件“code”)
function pegarAsCoisas() {
  var html =  UrlFetchApp
    .fetch('http://www.saosilvestre.com.br')
    .getContentText();
  Logger.log(html);
}