【PhantomJsCloud】 GASで動的ページをスクレイピング 

GAS

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;
}
タイトルとURLをコピーしました