PhantomJsCloud
PhantomJsCloud API Service - It just works!
PhantomJsCloud offers high performance manipulation and rendering of webpages to HTML, PDF, JEPG, or JSON. Simple to use...
GAS(Google Apps Scripts)でスクレイピング 実装しようとする場合、Parserライブラリを使うことになると思うが、これは動的ページに対応しておらず、静的なページしか取得できない。
GASはスプレッドシート 用のjavascript的な立ち位置で本来のjavascriptのようにDOM操作等がサポートされていない。
そこで、javascriptで生成されたページを取得しようとした場合にPhantomJsCloudが必要となってくる。
PhantomJsCloudの料金体系
〇毎日のサブスクリプションクレジット(無料プラン)
0.04763(約500ページ)
〇1 日あたりのプランの最大値: 0.04763 (1 日あたり約500ページ)
プリペイドクレジット
$0.00100(約10ページ)
PhantomJsCloud と Parser で動的ページからテキストを取得
function myFunction() {
let spreadSheet = SpreadsheetApp.getActive()
let sheet = spreadSheet.getSheets()[0]
//phantomJSCloudScraping関数を呼び出す
let html = phantomJSCloudScraping("https://news.yahoo.co.jp/search?p=オリンピック");
let total =
Parser.data(html)
.from('<div class="sc-kNEibC ctQJXs"><span>')
.to('</span><span>件</span></div>')
.iterate();
sheet.getRange(1,1).setValue(total)
}
function phantomJSCloudScraping(URL) {
let key = "<ここにはphantomJSCloudのライセンスキーを入力>";
//HTTPSレスポンスに設定するペイロードのオプション項目を設定する
let option =
{url:URL,
renderType:"HTML",
outputAsJson:true,
};
//オプション項目をJSONにしてペイロードとして定義し、エンコードする
let payload = JSON.stringify(option);
payload = encodeURIComponent(payload);
//PhantomJsCloudのAPIリクエストを行うためのURLを設定
let apiUrl = "https://phantomjscloud.com/api/browser/v2/"+ key +"/?request=" + payload;
//設定したAPIリクエスト用URLにフェッチして、情報を取得する。
let response = UrlFetchApp.fetch(apiUrl);
//取得したjsonデータを配列データとして格納
let json = JSON.parse(response.getContentText());
//APIから取得したデータからJSから生成されたソースコードを取得
let source = json["content"]["data"];
return source;
}