web-dev-qa-db-fra.com

IMPORTXML Numéros d'examen Google Spreadsheet Amazon

Je suis en train de faire une feuille de calcul qui nécessite que je connaisse le nombre d'avis d'un produit sur Amazon. Je cherchai comment mettre à jour de manière dynamique les commentaires au fur et à mesure que d'autres entraient et trouvaient la formule IMPORTXML.

Dans cet exemple spécifique, je ne peux pas savoir comment obtenir les informations sur la feuille, car l'erreur continue de s'afficher: "le contenu XML importé ne peut pas être analysé."

Ma formule actuelle est =IMPORTXML("http://www. Amazon.com/Optoma-GT1080-1080p-Gaming-Projector/product-reviews/B00M9D4CAK/","//*[@id='cm_cr-product_info']/div/div[1]/div[2]/span")

(Espace inséré avant "Amazon" pour éviter la conversion automatique du lien).

Ceci est la pièce que je veux obtenir.

this is what i'm trying to get

1
Isaac Brekke

Toutes les pages Web ne peuvent pas être supprimées avec importXML. Il y a plusieurs problèmes possibles:

  1. Certains contenus de la page peuvent être générés avec JavaScript, ce qui n'est pas exécuté par importXML.
  2. La page peut ne pas être valide en tant que fichier XML. Une page HTML typique est un XML invalide (sauf s'il s'agit d'une page XTHML). L'analyseur syntaxique de importXML essaie de résoudre le problème, mais en présence de nombreux contenus non conformes à XML (par exemple, des scripts en ligne massifs fournis par Amazon), il échoue.
  3. Le site peut interdire aux bots d'accéder à certains contenus.

Avec Amazon, vous faites face aux deuxième et troisième obstacles. Une façon de contourner le deuxième problème consiste à utiliser UrlFetchApp.fetch(url).getContentText() à partir du script Apps. Cela donne la source entière de la page, que vous pouvez ensuite analyser de la manière que vous voulez, par exemple avec des expressions régulières.

Il faut faire attention avec le grattage d'Amazon. Lors de l'expérimentation, j'ai parfois reçu le message suivant à la place du contenu de la page.

Pour discuter de l'accès automatisé aux données Amazon, veuillez contacter [email protected].

Mais voici une fonction de script d’applications qui saisit le nombre de critiques de ce produit et l’insère dans la cellule A1 de la feuille active.

function reviewCount() {   // remove space before Amazon on the next line 
  var url = "http://www. Amazon.com/Optoma-GT1080-1080p-Gaming-Projector/product-reviews/B00M9D4CAK/";
  var content = UrlFetchApp.fetch(url).getContentText();
  var match = /totalReviewCount">([0-9, ]+)/.exec(content);
  SpreadsheetApp.getActiveSheet().getRange("A1").setValue(match[1]);
}

Pour autant que je sache, cela peut toujours être contre le TOS d'Amazon. Connexes: Existe-t-il une API Amazon.com permettant de récupérer des critiques de produits?

1
user79865