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

2019-03-11

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

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

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

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

ポイント 商品検索結果ページからのデータ取得の基本的な考え方

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

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

商品検索結果ページから検索結果一覧を作成する方法も、基本的には前回と同じです。ただし、(1)と(2)の間に、取得したHTMLを検索結果ごとに区切るという操作が入ります。その後の操作は、区切った文字列に対して行います。

(1)URLfetch関数を使ってWebページのソース(HTML)を取得
(2)取得したHTMLを商品データ毎に区切る

(3)(2)で区切ったデータ内で必要な文字列を囲んでいる固有のタグ・文字を検索して、正規表現を使って当該文字列を抽出
(4)文字列操作関数を使って(3)で抽出した文字列から不要な部分を削除
(5)(3),(4)を繰り返す

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

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

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

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

  var url2="https://netmall.hardoff.co.jp/search/?exso=1&q=%E3%82%BB%E3%82%A4%E3%82%B3%E3%83%BC%E3%80%80%E8%85%95%E6%99%82%E8%A8%88"

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

(2)取得したHTMLを商品データ毎に区切る

Split関数を使って(1)で取得した文字列を分割します。今回の例の場合、「

」という文字列で区切ります。なお、区切り文字内の「”」は特殊文字ですので、「\」を前に入れます。

  //split
  var dat=response.split("
<div class=\"p-goods__item p-goods__item--with-cart-btn\">")
  Logger.log(dat.length)

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

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

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

今回の例の場合
前タグ(文字列1):
後タグ(文字列2):

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

→ <\/p>

  //商品タイトルを取得
  var myRegexp = /<span class="p-goods__nameClamp">([\s\S]*?)<\/span>/i;
  var tit = myRegexp.exec(dat[i]);
  Logger.log(tit[1])
    
  }

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

今回は、タイトルをそのまま取得できるので不要です。

(5)(3),(4)を繰り返す

繰り返しを表す「for文」を使って(3),(4)を繰り返します。

ポイント ソース全体

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

function test2() {
  //商品検索ページデータ取得例
  //抽出するURL
  var url2="https://netmall.hardoff.co.jp/search/?exso=1&q=%E3%82%BB%E3%82%A4%E3%82%B3%E3%83%BC%E3%80%80%E8%85%95%E6%99%82%E8%A8%88"

 //URLfetch関数でHTMLを取得
  var response = UrlFetchApp.fetch(url2);
  var response=response.getContentText();  
  
  //split
  var dat=response.split("
<div class=\"p-goods__item p-goods__item--with-cart-btn\">")
  Logger.log(dat.length)
  
  for(var i=1;i<dat.length;i++){
  //商品タイトルを取得
  var myRegexp = /<span class="p-goods__nameClamp">([\s\S]*?)<\/span>/i;
  var tit = myRegexp.exec(dat[i]);
  Logger.log(tit[1])
    
  }

}

ポイント まとめ

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

いろいろなサイトで試してみて下さい。

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