解析HTML

时间:2015-11-25 22:12:37

标签: javascript google-apps-script web-scraping html-parsing

我正在尝试使用以下网址从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

4 个答案:

答案 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