私はスプレッドシートを作成していますが、そのためには製品のAmazonレビューの数が必要です。レビューが追加されたときにレビューを動的に更新する方法を調べ、IMPORTXML
の式を見つけました。
この特定の例では、「インポートされたxmlコンテンツを解析できません」というエラーが発生し続けるため、シートの情報を取得する方法を見つけることができません。
私の現在の式は=IMPORTXML("http://www. Amazon.com/Optoma-GT1080-1080p-Gaming-Projector/product-reviews/B00M9D4CAK/","//*[@id='cm_cr-product_info']/div/div[1]/div[2]/span")
です
(リンクの自動変換を避けるために、「Amazon」の前にスペースが挿入されます)。
これは私が手に入れたい作品です。
すべてのウェブページがimportXML
でスクレイピングできるわけではありません。考えられるいくつかの問題があります。
importXML
によって実行されないJavaScriptで生成される場合があります。importXML
のパーサーは状況を整理しようとしますが、XMLに準拠していないコンテンツが多数存在する場合(たとえば、Amazonが提供する大規模なインラインスクリプト)は失敗します。Amazonでは、2番目と3番目の障害に直面しています。 2番目の問題を回避する方法は、AppsスクリプトからUrlFetchApp.fetch(url).getContentText()
を使用することです。これにより、ページのソース全体が取得され、その後、たとえば正規表現を使用して、任意の方法で解析できます。
Amazonのスクレイピングには注意が必要です。実験中に、ページコンテンツの代わりに次のメッセージが表示されることがありました。
Amazonデータへの自動アクセスについては、api-services-support @ Amazon.comにお問い合わせください。
ただし、この製品のレビュー数を取得し、現在のシートのセルA1に挿入するAppsスクリプト関数があります。
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]);
}
私の知る限り、これはまだAmazonのTOSに反する可能性があります。関連: 製品レビューを取得するためのAmazon.com APIはありますか?