Java

Javaでクローラを実装する

More than 1 year has passed since last update.

なにかライブラリが無いかと思ってcrawler4jに行き着きました。

使用準備

http://code.google.com/p/crawler4j/ のサイドバーにある[Downloads]からcrawler4j-3.5.zipとcrawler4j-3.5-dependencies.zipをダウンロードする。
htmlのパースにはjsoupを使うので、ここからダウンロードしておく。

eclipseだと[ビルドパスの構成]>[ライブラリー]から[外部jar追加]で全てのjarファイルを追加する。
スクリーンショット 2014-04-10 19.11.53.png

これで準備完了のはず?
そろそろmaven使おう

実装

大体の実装としてはBasic Crawlerで十分だと思う。

BaseCrawler.javaOverrideしてあるvisitshoudVisitでは、クロールするurlの絞り込みや、実際の処理を記述出来る。

BaseCrawlController.javaでは設定を行い、シードとなるurlを与えたり、クロールする深さやページ数、proxyやクロールの際のスリープ時間等を設定出来る。

jsoupを使ったhtmlパースはこの記事を参考にした。
上の記事でも触れられているが、jsoupでパースして得られるElementのAPI一覧は見たほうが良いと思う。

htmlのパース始め
// BaseCrawler.javaの73行目
String html = htmlParseData.getHtml();
Document doc = jsoup.parse(html);

// ID
Element elm = doc.getElementById("hoge");

// CSSセレクタ
Elements elements = document.select("#hoge ul .error");
for (Element element : elements) {
    System.out.println(element.outerHtml());
}

ややJavaScriptっぽい。
CSSセレクタを使えるのが手軽で良い。