Wie kann eine HTML-Zeichenfolge in Google Apps Script ohne Verwendung von XmlService analysiert werden?

Ich möchte einen Scraper mit Google Spreadsheets und Google Apps Script erstellen. Ich weiß, dass es möglich ist und ich habe einige Tutorials und Threads darüber gesehen.

Die Hauptidee ist zu verwenden:

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

Und dann holen und arbeiten Sie mit den Elementen. Die Methode

XmlService.parse()

Funktioniert bei einigen Seiten nicht. Zum Beispiel, wenn ich versuche:

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

Ich erhalte den folgenden Fehler:

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

Ich habe versucht, @ zu verwendstring.replace(), um die Zeichen zu entfernen, die anscheinend den Fehler verursachen, aber nicht funktionieren. Alle möglichen anderen Fehler werden angezeigt. Der folgende Code zum Beispiel:

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

Gibt mir den folgenden Fehler:

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

Ich glaube, das ist ein Problem mit demXmlService.parse() Methode

Ich habe in diesem Thread gelesen:

Google App Script-Analysetabelle aus fehlerhaftem HTML-Code undWas ist der beste Weg, um HTML in Google Apps-Skript zu analysieren dass man eine veraltete Methode namens @ verwenden kaxml.parse() akzeptiert einen zweiten Parameter, der das Parsen von HTML ermöglicht. Wie ich bereits erwähnt habe, ist es jedoch veraltet und ich kann nirgendwo eine Dokumentation finden. Dasxml.parse() scheint die Zeichenfolge zu analysieren, aber ich habe Probleme mit den Elementen zu arbeiten, da es an Dokumentation mangelt. Und es ist auch nicht die sicherste langfristige Lösung, da sie jederzeit deaktiviert werden kann.

So möchte ich wissen, wie ich diesen HTML-Code in Google Apps Script analysiere?

Ich habe auch versucht:

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

Aber es funktioniert nicht, ich bekomme diesen Fehler:

Fehlerhafter HTML-Inhalt:

Ich dachte darüber nach, eine Open Source-Bibliothek zum Parsen des HTML-Codes zu verwenden, konnte aber keine finden.

Mein ultimatives Ziel ist es, einige Informationen von einer Reihe von Seiten wie Preis, Link, Name der Produkte usw. zu erhalten. Ich habe es geschafft, dies mit einer Reihe von RegEx zu tun:

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

Aber dies ist sehr zeitaufwendig für das Programmieren, es ist sehr schwer, es dynamisch zu ändern und es ist nicht sehr zuverlässig.

Ich brauche eine Möglichkeit, diesen HTML-Code zu analysieren und einfach auf seine Elemente zuzugreifen. Es ist eigentlich kein Add-On. aber ein einfaches google app script ..

Antworten auf die Frage(14)

Ihre Antwort auf die Frage