GASでJavaScriptで動作するWebページをスクレイピングするPhantomJs Cloudとは

phantomJS
みなさん、こんにちは!うえはら(@tifoso_str)です。

JavaScriptで動作するWebページを色々な言語でスクレイピング】するシリーズの第三弾です。

前回は、VBAでIEを操作してJavaScriptで動作するWebページをスクレイピングしました。

VBAでIEを操作してJavaScriptで動作するWebページをスクレイピング
「JavaScriptで動作するWebページ(動的サイト)を色々な言語でスクレイピング」することをシリーズでお伝えしています。 今回はVBAでInternet Explorerを操作してJavaScriptで動作するWebページをスクレイピングします。

今回から、Google Apps Scriptを使ってのスクレイピングです。

Google Apps Scriptでは、VBAでInternet Explorerを操作したように、ブラウザ操作ができません。

そのため、ブラウザに変わってJavaScriptを実行する仕組みが必要です。

それを、解決してくれるのがPhantomJs Cloudです。

ということで、今回は「GASとPhantomJs CloudでJavaScriptで動作するWebページをスクレイピングする準備」部分をお伝えします。

ホントはChrome操作できたらべんりなんですけどね~

スポンサーリンク

JavaScriptを考慮せずにスクレイピング

まずは、JavaScriptを考慮せずにスクレイピングしてみます。

スクリプトは下記のようになります。

function scraping() {
 
  const URL = 'https://www.eb.pref.okinawa.jp/kassui/';//沖縄県企業局のダム貯水率            
  
  var response = UrlFetchApp.fetch(URL);
  var html = response.getContentText('UTF-8');
  
  var myRegexp = /<title>([\s\S]*?)<\/title>/;
  var title = html.match(myRegexp);
  Logger.log("タイトル:%s",title);
 
  var myRegexp = /id=\"chosui_hiduke\">([\s\S]*?)<\/span>/;
  var day = html.match(myRegexp);
  Logger.log("日付:%s",day);
  
  var myRegexp = /id=\"ritsu_today4\">([\s\S]*?)<\/td>/;
  var day = html.match(myRegexp);
  Logger.log("貯水率:%s",day);
}

Google Apps ScriptでHTMLドキュメントを取得する方法は下記記事をご覧下さい。

Google Apps ScriptでREST APIを使って郵便番号住所変換スプレッドシート関数を作る
Google Apps Scriptを使ってスプレッドシートの自作関数を作っています。今回はREST APIを使って郵便番号から住所を求めるスプレッドシート関数を作ります。API初心者にもおすすめです。

また、正規表現については下記記事をご覧下さい。

Google Apps Scriptで正規表現を使って必要な情報を抽出する最も簡単なスクリプト
Google App Scriptを使ってGmailで届いたフォーム送信情報をスプレッドシートに蓄積する方法の初回。正規表現とは何か、またGASで正規表現により文字列を抽出する最も簡単なスクリプトを紹介します。

実行して、ログを確認すると下記のようになります。

GASスクレイピング確認

やはり、値を取得できていないですね。

余談ですが、正規表現でマッチした全てを返す「g」フラグを付けないと、最初にマッチした結果が配列の1番目に、そしてその中身の部分が配列の2番目に入るようです。

Google Apps Script便利ですね!

JavaScriptが動作するWebページをスクレイピングするPhantomJs Cloudとは

Google Apps Scriptで、JavaScriptで動作するWebページをスクレイピングするに、
PhantomJs Cloudを利用します。

Phantom Js Cloudはクラウドで動作するヘッドレスブラウザです。

簡単に言うと、スクレイピングしたいURLをわたすと、JavaScriptが実行された後のHTMLドキュメントを返してくれるサービスです。

無料プランでは、一日に500ページ程度まで利用できます。

PhantomJs Cloudのアカウント作成

PhantomJs Cloudこちらのページの「Sign up now!」からアカウントを作成します。

SignUoNow

メールアドレスを入力し、私はロボットではありませんにチェックを入れて、「Sign up」します。
phantomJSアドレス入力

先ほど入力したメールアドレスに、確認のメールが届くので、メールの中の「Click to confirm your Email Address and set your password.」をクリックします。

phantomJSアドレス確認

最後にパスワードを設定して、Sign up完了です。

phantomJSパスワード設定

PhantomJs Cloudの使い方

ログインすると下記のようになります。

実際の使い方は右上の「API Docs」から確認することが出来ます。

phantomJS_APIdocs

実際に見てもらうとわかりますが、全て英語です。 

しかも、Google Apps ScriptやJavaScriptの例もないので、ちょっとどこ見ていいかわからないですよね。

「HTTP Endpoint」の下記部分を見ればいいのですが、JSON形式のrequestが必要で、これもエンコードする必要があります。

phantomJS_usage

う~ん、色々難しそうですね。

今回は準備部分と言うことでここまでとします。

まとめ

今回は「GASでJavaScriptで動作するWebページをスクレイピングする準備」部分をお伝えしました。

PhantomJs CloudというWebサービスのアカウントを作成して、API Docsを確認してみました。

次回からはGoogle Apps ScriptでPhantomJS Cloudを利用して、実際にスクレイピングしていきます。

GASでPhantomJS Cloudを利用してWebページをスクレイピング
「JavaScriptで動作するWebページ(動的サイト)を色々な言語でスクレイピング」することをシリーズでお伝えしています。 今回はGoogle Apps ScriptとPhantomJS Cloudでスクレイピングします!

お楽しみに!

連載目次:JavaScriptで動作するWebページを色々な言語でスクレイピング

Webスクレイピングしていて、値が取得できないということはありませんか?

そんな時は、Webサイトの表示にJavaScriptを利用しているからです。

本連載では、色々な言語でその対応をご紹介します!

  1. GASやVBAでスクレイピングができない理由として考えるべきJavaScriptのこと
  2. VBAでIEを操作してJavaScriptで動作するWebページをスクレイピング
  3. GASでJavaScriptで動作するWebページをスクレイピングするPhantomJsとは
  4. GASでPhantomJSを利用してWebページをスクレイピング
  5. GASでスクレイピングしたデータからmatchメソッドと正規表現を使って目的の値を取得
  6. PythonでPhantomJs Cloudを利用してWebページをスクレイピング
  7. PythonとPhantomJs CloudでスクレイピングしたデータをBeautifulSoupで解析
タイトルとURLをコピーしました