Google Apps ScriptでWebデータ取得の考え方(個別商品ページ)

2019-03-08

Googleスプレッドシートでは、プログラム(Google Apps Script)を使ってWebページのデータを取得(スクレイピング)する方法があります。それがUrlfetch関数を使用した方法です。

前回は、URLfetch関数の概要を紹介しました。

Googleスプレッドシートを使ったデータ取得:URLfetch関数の活用
Googleスプレッドシートには、Web上からデータを抽出する関数が用意されています。これらについては、こちらで紹介してきました。 GoogleスプレッドシートIMPORTXML関...

今回は、URLfetch関数を使って、実際のサイトの商品ページのWebデータを取得する方法を考え方を含めて紹介していきます。

ポイント Webデータ取得の基本的な考え方

特定のWebページから必要なデータを抽出する際の基本的な流れは次の通りです。
(1)URLfetch関数を使ってWebページのソース(HTML)を取得
(2)必要な文字列を囲んでいる固有のタグ・文字を検索して、正規表現を使って当該文字列を抽出
(3)文字列操作関数を使って(2)で抽出した文字列から不要な部分を削除

全体から必要な部分を抽出していくという流れになります。

ポイント 実際のデータ取得作業の紹介

今回はネットモールの商品ページから、価格情報を取得する方法を紹介します。

(1)URLfetch関数を使ってWebページのソース(HTML)を取得

URLfetch関数を使って、WebページのHTML全体を取得します。

  //抽出するURL
  var url2="https://netmall.hardoff.co.jp/product/*****/"   //実際のURLを入力

 //URLfetch関数でHTMLを取得
  var response = UrlFetchApp.fetch(url2);
  var response=response.getContentText();  

(2)必要な文字列を囲んでいる固有のタグ・文字を検索して、正規表現を使って当該文字列を抽出

前回紹介した正規表現を使った文字列抽出の方法を使って、価格情報の前後にあるHTMLタグ(HTMLの制御文字)を調べた後、価格情報を含む文字列を抽出します。

Google Apps ScriptでWebデータ取得では使う正規表現はこれだけ!
Googleスプレッドシートでは、プログラム(Google Apps Script)を使ってWebページのデータを取得する方法があります。それがUrlfetch関数を使用した方法です。前回は、U...

今回の例の場合
前タグ(文字列1):<p class=”p-goodsDetail__price”>
後タグ(文字列2):<span class=”p-goodsDetail__tax”>



注)前タグ、後タグ内に「/」などの特殊文字がある場合には、その前に「\」を入力する必要があります。例</p> → <\/p>

  //商品価格を取得
  var myRegexp = /<p class="p-goodsDetail__price">([\s\S]*?)<span class="p-goodsDetail__tax">/i;
  var pri = myRegexp.exec(response);

(3)文字列操作関数を使って(2)で抽出した文字列から不要な部分を削除

今回は、Replace関数を使って、「,」と「円」を空欄に置換します。

  var price=pri[1].replace(",","")
  var price=price.replace("円","")

ポイント 全体ソース

ソース全体は次の通りです。

function test() {

  //抽出するURL
  var url2="https://netmall.hardoff.co.jp/product/*****/"

 //URLfetch関数でHTMLを取得
  var response = UrlFetchApp.fetch(url2);
  var response=response.getContentText();  
  
 
  //商品価格を取得
  var myRegexp = /<p class="p-goodsDetail__price">([\s\S]*?)<span class="p-goodsDetail__tax">/i;
  var pri = myRegexp.exec(response);
  Logger.log("Price:"+pri[1])  

  var price=pri[1].replace(",","")
  var price=price.replace("円","")
  
  Logger.log("Price:"+price)
}

ポイント まとめ

今回は、URLfetch関数を使って、実際に実際のサイトの商品ページのWebデータを取得する方法を考え方を含めて紹介しました。基本は、全体を抽出して、そこから徐々に対象を絞って抽出するという流れになります。

次回は、商品検索結果のように複数の連続した複数の商品データを抽出する場合の考え方を紹介します。

Copyright(c) 2016 e-Shikumi-Labo All Rights Reserved.