ぱらげです。
Google Apps Script(GAS)のParserを使って以下のページをスクレイピングしようとします。
![](https://pala-ghe.com/wp/wp-content/uploads/2021/11/スクリーンショット-2021-11-14-14.41.05-700x376.png)
デベロッパーツール上では、通常のHTMLページのように見えますが、この情報を「UrlFetchApp.fetch(url).getContentText();」で取得しようとすると
![](https://pala-ghe.com/wp/wp-content/uploads/2021/11/スクリーンショット-2021-11-14-14.43.06-700x197.png)
このようにデベロッパーツールとの内容と全く異なります。このようなサイトはJavaScriptによって動的に生成されたWebページで、そのままではGASでスクレイピングすることができません。
しかし、PhantomJsCloudのAPIを利用すれば、動的なページもスクレイピングすることができます。
今回はGASとPhantomJsCloudを組み合わせたスクレイピング方法をご紹介します。
PhantomJsCloudとは
PhantomJsCloudは、ヘッドレスブラウザのクラウドサービスであり、Javascriptを実行してレンダリングされたHTMLデータを取得することができます。
流れはこのようになり、
1. PhantomJsCloudで動的なページをレンダリング
2. GASでレンダリング結果をスクレイピング
上記の手順でPhantomJsCloudのAPIとGASを組み合わせることによって、動的なページのスクレイピングが可能になります。
PhantomJsCloud APIキー取得方法
まず以下のページにアクセスします。
https://phantomjscloud.com/
![](https://pala-ghe.com/wp/wp-content/uploads/2021/11/スクリーンショット-2021-11-14-14.54.16.png)
上記のSign Upボタンを押します。
![](https://pala-ghe.com/wp/wp-content/uploads/2021/11/スクリーンショット-2021-11-14-14.55.27.png)
メールアドレスの入力などをし、Sign upします。
![](https://pala-ghe.com/wp/wp-content/uploads/2021/11/スクリーンショット-2021-11-14-14.58.11-700x155.png)
上記のようなメールが届くので、「Click to confirm your Email Address and set your password」をクリックしパスワードなどを登録します。
![](https://pala-ghe.com/wp/wp-content/uploads/2021/11/スクリーンショット-2021-11-14-15.00.19-700x192.png)
ログインをして「Dashboard」を開くと「ApiKey」が左側に記載されているので、これを後で使用します。
コードサンプル
以下は全体のコードサンプルです。
var APIKEY = "取得したAPIキーを記載する";
function myFunction() {
//URL指定
const url = "urlを記載する";
//getResource関数を呼び出し
var response = getResource(url);
//parseResponse関数を呼び出し
var source = parseResponse(response);
//情報を抽出しリスト化する
var tasks = Parser.data(source)
.from('取得文字列の直前の文字列')
.to('取得文字列の直後の文字列')
.iterate();
}
function getResource(target_url) {
//HTTPSレスポンスに設定するペイロードのオプション項目を設定する
var _options = {
url: target_url,
renderType: "html",
outputAsJson: true
};
//オプション項目をJSONにしてペイロードとして定義し、エンコードする
var _payload = encodeURIComponent(JSON.stringify(_options));
//PhantomJsCloudのAPIリクエストを行うためのURLを設定
var _request =
"https://phantomjscloud.com/api/browser/v2/" +
APIKEY +
"/?request=" +
_payload;
//設定したAPIリクエスト用URLにフェッチして、情報を取得
var _response = UrlFetchApp.fetch(_request).getContentText();
return _response;
}
function parseResponse(response) {
//取得したjsonデータを配列データとして格納
var _json = JSON.parse(response);
//APIから取得したデータからJSから生成されたソースコードを取得
var _source = _json["content"]["data"];
return _source;
}
コメント