Google Apps ScriptでWebデータ取得の考え方(個別商品ページ)
Googleスプレッドシートでは、プログラム(Google Apps Script)を使ってWebページのデータを取得(スクレイピング)する方法があります。それがUrlfetch関数を使用した方法です。
前回は、URLfetch関数の概要を紹介しました。
今回は、URLfetch関数を使って、実際のサイトの商品ページのWebデータを取得する方法を考え方を含めて紹介していきます。
Webデータ取得の基本的な考え方
特定のWebページから必要なデータを抽出する際の基本的な流れは次の通りです。
(1)URLfetch関数を使ってWebページのソース(HTML)を取得
(2)必要な文字列を囲んでいる固有のタグ・文字を検索して、正規表現を使って当該文字列を抽出
(3)文字列操作関数を使って(2)で抽出した文字列から不要な部分を削除
全体から必要な部分を抽出していくという流れになります。
実際のデータ取得作業の紹介
今回はネットモールの商品ページから、価格情報を取得する方法を紹介します。
(1)URLfetch関数を使ってWebページのソース(HTML)を取得
URLfetch関数を使って、WebページのHTML全体を取得します。
1 2 3 4 5 6 | //抽出するURL //URLfetch関数でHTMLを取得 var response = UrlFetchApp.fetch(url2); var response=response.getContentText(); |
(2)必要な文字列を囲んでいる固有のタグ・文字を検索して、正規表現を使って当該文字列を抽出
前回紹介した正規表現を使った文字列抽出の方法を使って、価格情報の前後にあるHTMLタグ(HTMLの制御文字)を調べた後、価格情報を含む文字列を抽出します。
今回の例の場合
前タグ(文字列1):<p class=”p-goodsDetail__price”>
後タグ(文字列2):<span class=”p-goodsDetail__tax”>
注)前タグ、後タグ内に「/」などの特殊文字がある場合には、その前に「\」を入力する必要があります。例</p> → <\/p>
1 2 3 | //商品価格を取得 var myRegexp = /<p class = "p-goodsDetail__price" >([\s\S]*?)<span class = "p-goodsDetail__tax" >/i; var pri = myRegexp.exec(response); |
(3)文字列操作関数を使って(2)で抽出した文字列から不要な部分を削除
今回は、Replace関数を使って、「,」と「円」を空欄に置換します。
1 2 | var price=pri[ 1 ].replace( "," , "" ) var price=price.replace( "円" , "" ) |
全体ソース
ソース全体は次の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | function test() { //抽出するURL //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データを取得する方法を考え方を含めて紹介しました。基本は、全体を抽出して、そこから徐々に対象を絞って抽出するという流れになります。
次回は、商品検索結果のように複数の連続した複数の商品データを抽出する場合の考え方を紹介します。