Phantomjs + Casperjs でスクレイピングを行う¶
概要¶
phantomjs という Javascript で動かせるヘッドレスブラウザと casperjs というユーティリティを使ってクローリング、スクレイピングを行う
ヘッドレスブラウザ : GUIのないブラウザクローリング : HTMLなどを取得することスクレイピング : 取得した情報から必要なものを抜き出すこと
インストール¶
方法1(pythonインストール済みならこれが楽)
npm install -g phantomjs casperjs
方法2
- http://phantomjs.org/ からZIPファイルをダウンロードして解凍
- http://casperjs.org/ からZIPファイルをダウンロードして解凍
- それぞれの解凍先の bin フォルダを環境変数 PATH に追加する
確認
ターミナルを起動させていたら再起動する
バージョンを確認する
phantomjs -v casperjs --version
実行ファイルの作成と実行¶
Yahoo!からトピックスのリンクを取ってくる処理を作ります。
フォルダを新規作成して移動する
npm init
でpackage.json
を作る(jqueryを入れるためなので何でもいい)npm install jquery
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();
casperjs getYahooTopics.js
で実行する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 : ブラウザをいろんな方法で動かす