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

2019-03-11

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

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

Googleスプレッドシートでは、プログラム(Google Apps Script)を使ってWebページのデータを取得(スクレイピング)する方法があります。それがUrlfetch関数を使用した方法です。前回は、URLfetch関数の概要を紹介しました。今回は、URLfetch関数を使って、実際のサイトの商品ページのWebデータを取得する方法を考え方を含めて紹介していきます。 Webデータ取得の基本的な考え方特定のWebページから必要なデータを抽出する際の基本的な流れは次の通りです。(1)URLfetch関数を使ってWebページのソース(HTML)を取得(2)必要な文字列を囲...

今回は、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スプレッドシートでは、プログラム(Google Apps Script)を使ってWebページのデータを取得する方法があります。それがUrlfetch関数を使用した方法です。前回は、URLfetch関数の概要を紹介しました。そこでも述べたとおり、URLfetch関数は文字列操作関数と組み合わせて使うことで力を発揮します。今回は、条件にあった文字列を抽出するための正規表現の使い方を紹介します。 正規表現とはテキストの文字列から、条件にあった文字列を抽出するための「条件部」の書き方です。正規表現だけで本が出ているくらい奥が深いものです。こ...

今回の例の場合
前タグ(文字列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.