Phantomjs + Casperjs でスクレイピングを行う

概要

phantomjs という Javascript で動かせるヘッドレスブラウザと casperjs というユーティリティを使ってクローリング、スクレイピングを行う

ヘッドレスブラウザ : GUIのないブラウザ
クローリング : HTMLなどを取得すること
スクレイピング : 取得した情報から必要なものを抜き出すこと

インストール

  • 方法1(pythonインストール済みならこれが楽)

    1. npm install -g phantomjs casperjs
  • 方法2

    1. http://phantomjs.org/ からZIPファイルをダウンロードして解凍
    2. http://casperjs.org/ からZIPファイルをダウンロードして解凍
    3. それぞれの解凍先の bin フォルダを環境変数 PATH に追加する
  • 確認

    1. ターミナルを起動させていたら再起動する

    2. バージョンを確認する

      phantomjs -v
      casperjs --version
      

実行ファイルの作成と実行

Yahoo!からトピックスのリンクを取ってくる処理を作ります。

  1. フォルダを新規作成して移動する

  2. npm initpackage.json を作る(jqueryを入れるためなので何でもいい)

  3. npm install jquery

  4. getYahooTopics.js を作成する

    var casper = require('casper').create();
    var fs     = require('fs');
    var $      = require('jquery');
    var FILE_NAME = "out.html";
    var TARGET ="http://www.yahoo.co.jp/";
    var outs =[];
    casper.start(TARGET, function(){
    // id="topicsfb"のコンテンツを取得する
    var t = this.getHTML("#topicsfb");
    // jqueryオブジェクト化してリンクを取得する
    $(t).find("a").each(function(){
        outs.push($(this).prop('outerHTML')+"\r\n");
    });
    });
    casper.then(function(){
    // 取得したリンクリストをファイル出力
    fs.write(FILE_NAME, outs.join(""));
    });
    casper.run();
    
  5. casperjs getYahooTopics.js で実行する

  6. out.html を確認する

注意

  • 取得先のサーバに負荷をかけないようにする
    • ループ処理などは慎重に

その他オプションなど

  • エンジンを phantomjs 以外にする
    • casperjs --engine=slimerjs 実行ファイル.js
  • プロキシを通して動かすオプション
    • --proxy=IP:PORT --proxy-type=http --proxy-auth=ID:PASS
    • no proxy はうまく働かないようなので、中と外の処理で実行ファイルを分ける必要がある

関連するキーワード

  • phantomjs : Chrome系エンジン
  • slimerjs : Firefox系エンジン
  • triflejs : IE系エンジン
  • casperjs : ラッパー、ユーティリティ
  • nightmare : ラッパー、ユーティリティ
  • Selenium : ブラウザをいろんな方法で動かす