5次元のカオス

南の島の学生がつらつらと日々を書き連ねます

JavaScript で Crawler を実装してみた

同期氏のお願いで css プロパティの取り得る値を取得するサンプルを作ってみた.

seka/crawler-sample

Promise にタイムアウトの処理を追加しないと、なにも言わずにプログラムが終了してしまうっていうバグに気付くまでだいぶ時間がかかってしまった...

こういうバグに早く気付くにはどうしたら良いんだろう...??

lapwinglabs/x-ray

今回、クローラーを実装する上で lapwinglabs/x-ray というライブラリを使ってみた。

以前、 cheeriojs/cheerio というライブラリを使ったことがあるのだが、その作者の新作らしい。

実装を読んでみると、内部で cheerio.js が使われているようだ。

使用方法が面白くて、 func(request, callback) みたいな感じで使う従来の js のライブラリと違って

function xray(source, scope, selector) の返り値が function node(source2, fn) になっている。

そのため、コールバックを以下のように定義する。

var xray = require('x-ray');
xray('http://google.com', 'title')(function(err, title) {
  console.log(title) // Google
})

今回のクローラーでは使用しなかったが、 paginatethrottletimeout といった便利な API も用意されている。

ざっくりとしたクローラーならすぐに実装できそうなので、今後も使っていきたい。

参考