Como analisar uma string HTML no Script do Google Apps sem usar o XmlService?

Quero criar um raspador usando o Google Spreadsheets com o Google Apps Script. Eu sei que é possível e já vi alguns tutoriais e tópicos sobre isso.

A idéia principal é usar:

  var html = UrlFetchApp.fetch('http://en.wikipedia.org/wiki/Document_Object_Model').getContentText();
  var doc = XmlService.parse(html);

E então comece e trabalhe com os elementos. No entanto, o método

XmlService.parse()

Não funciona para alguma página. Por exemplo, se eu tentar:

function test(){
    var html = UrlFetchApp.fetch("https://www.nespresso.com/br/pt/product/maquina-de-cafe-espresso-pixie-clips-preto-lima-neon-c60-220v").getContentText();
    var parse = XmlService.parse(html);
}

Estou tendo o erro a seguir:

Error on line 225: The entity name must immediately follow the '&' in the entity reference. (line 3, file "")

Eu tentei usarstring.replace() para eliminar os caracteres que aparentemente estão causando o erro, mas ele não funciona. Todos os tipos de outros erros aparecem. O código a seguir, por exemplo:

function test(){
    var html = UrlFetchApp.fetch("https://www.nespresso.com/br/pt/product/maquina-de-cafe-espresso-pixie-clips-preto-lima-neon-c60-220v").getContentText();
    var regExp = new RegExp("&", "gi");
    html = html.replace(regExp,"");

    var parse = XmlService.parse(html);
}

Dá-me o seguinte erro:

Error on line 358: The content of elements must consist of well-formed character data or markup. (line 6, file "")

Eu acredito que este é um problema com oXmlService.parse() método.

Eu li estes tópicos:

Tabela de análise do Google App Script a partir do html confuso eQual é a melhor maneira de analisar html no script do google apps que se pode usar um método obsoleto chamadoxml.parse() que aceita um segundo parâmetro que permite analisar o HTML. No entanto, como mencionei, está obsoleto e não consigo encontrar nenhuma documentação em nenhum lugar. oxml.parse() parece analisar a string, mas tenho problemas para trabalhar com os elementos devido à falta de documentação. E também não é a solução mais segura a longo prazo, porque pode ser desativada em breve.

Então, quero saber como analiso esse HTML no script do Google Apps?

Eu também tentei:

function test(){

    var html = UrlFetchApp.fetch("https://www.nespresso.com/br/pt/product/maquina-de-cafe-espresso-pixie-clips-preto-lima-neon-c60-220v").getContentText();
    var htmlOutput = HtmlService.createHtmlOutput(html).getContent();

    var parse = XmlService.parse(htmlOutput);
}

Mas não funciona, recebo este erro:

Conteúdo HTML malformado:

Pensei em usar uma biblioteca de código aberto para analisar o HTML, mas não consegui encontrar nenhum.

Meu objetivo final é obter algumas informações de um conjunto de páginas como preço, link, nome dos produtos etc. Consegui fazer isso usando uma série de RegEx:

var ss = SpreadsheetApp.getActiveSpreadsheet();
  var linksSheet = ss.getSheetByName("Links");
  var resultadosSheet = ss.getSheetByName("Resultados");

function scrapyLoco(){

  var links = linksSheet.getRange(1, 1, linksSheet.getLastRow(), 1).getValues();
  var arrayGrandao = [];
  for (var row =  0, len = links.length; row < len; row++){
   var link = links[row];


   var arrayDeResultados = pegarAsCoisas(link[0]);
   Logger.log(arrayDeResultados);
   arrayGrandao.push(arrayDeResultados);
  }   


  resultadosSheet.getRange(2, 1, arrayGrandao.length, arrayGrandao[0].length).setValues(arrayGrandao);

}


function pegarAsCoisas(linkDoProduto) {
  var resultadoArray = [];

  var html = UrlFetchApp.fetch(linkDoProduto).getContentText();
  var regExp = new RegExp("<h1([^]*)h1>", "gi");
  var h1Html = regExp.exec(html);
  var h1Parse = XmlService.parse(h1Html[0]);
  var h1Output = h1Parse.getRootElement().getText();
  h1Output = h1Output.replace(/(\r\n|\n|\r|(^( )*))/gm,"");

  regExp = new RegExp("Ref.: ([^(])*", "gi");
  var codeHtml = regExp.exec(html);
  var codeOutput = codeHtml[0].replace("Ref.: ","").replace(" ","");

  regExp = new RegExp("margin-top: 5px; margin-bottom: 5px; padding: 5px; background-color: #699D15; color: #fff; text-align: center;([^]*)/div>", "gi");
  var descriptionHtml = regExp.exec(html);
  var regExp = new RegExp("<p([^]*)p>", "gi");
  var descriptionHtml = regExp.exec(descriptionHtml);
  var regExp = new RegExp("^[^.]*", "gi");
  var descriptionHtml = regExp.exec(descriptionHtml);
  var descriptionOutput = descriptionHtml[0].replace("<p>","");
  descriptionOutput = descriptionOutput+".";

  regExp = new RegExp("ecom(.+?)Main.png", "gi");
  var imageHtml = regExp.exec(html);
  var comecoDaURL = "https://www.nespresso.com/";
  var imageOutput = comecoDaURL+imageHtml[0];

  var regExp = new RegExp("nes_l-float nes_big-price nes_big-price-with-out([^]*)p>", "gi");
  var precoHtml = regExp.exec(html);
  var regExp = new RegExp("[0-9]*,", "gi");
  precoHtml = regExp.exec(precoHtml);
  var precoOutput = "BRL "+precoHtml[0].replace(",","");

  resultadoArray = [codeOutput,h1Output,descriptionOutput,"Home & Garden > Kitchen & Dining > Kitchen Appliances > Coffee Makers & Espresso Machines",
                    "Máquina",linkDoProduto,imageOutput,"new","in stock",precoOutput,"","","","Nespresso",codeOutput];

  return resultadoArray;
}

Mas isso é muito demorado para programar, é muito difícil alterá-lo dinamicamente e não é muito confiável.

Eu preciso de uma maneira de analisar esse HTML e acessar facilmente seus elementos. Na verdade, não é um complemento. mas um script simples do aplicativo do Google

questionAnswers(7)

yourAnswerToTheQuestion