casperJSでFlickrから画像をスクレイピングする


サンプルとしてFlickrから
ネコという単語を入力してその検索結果の画像のスクリーンショットを保存するスクリプトです

imageFlickr.js
//For CasperJS SOURCE
var casper = require('casper').create();

//casperを開始する
casper.start();

//Flickrを開く
casper.open("https://www.flickr.com/");

//検索するワード
var word = "ネコ";

//フォームにワードを入力する
casper.then(function(){
  this.fill("form",{text:word},true);
});

//スクリーンショットを撮影する
casper.viewport(1280,1024).then(function(){
  casper.captureSelector('imgcat.png',"#search-unified-content[role='main']");
});

//実行開始する
casper.run();

こんな感じで実行.
casperjs imageFlickr.js

でもこれじゃあ不便だよね?

コマンドライン引数を受け取れるようにした方が絶対いい!

imageFlickr2.js
//For CasperJS SOURCE
var casper = require('casper').create();

//コマンドライン引数を受け取る
var word = casper.cli.args;

//casperを開始する
casper.start();

//google画像検索を開く
casper.open("https://www.flickr.com/");

//フォームにワードを入力する
casper.then(function(){
  this.fill("form",{text:word[0]},true);
});

//スクリーンショットを撮影する
casper.viewport(1280,1024).then(function(){
  casper.captureSelector('imgcat.png',"#search-unified-content[role='main']");
});

//実行開始する
casper.run();

これで引数を受け取れるようになる.
var word = casper.cli.args;
こんな感じで実行.
casperjs imageFlickr2.js ネコちゃん(第一引数)

シェルでもできたほうがいいよね?

imageFlickr.sh
#!bin/sh
casperjs googleimage.js $1
//画像を開く
open imgcat.png
こんな感じで実行.
sh imageFlickr.sh ネコちゃん

最後に簡単な説明として

casperJSはphantomJSを操作する為のjavascriptです。
phantomJSは見えないブラウザだと思ってください。

研究の画像収集の短縮になど使ってください。( ^ω^ )

Flickrから画像をダウンロードするのはすなおにAPIを使った方が早そうなので省きます。

大学のページをスクレイピングして解析したくて調べていたら、casperjsに出会いました。作業がは捗りそうです。