blog.petitviolet.net

Javaでクローラを実装する

2014-04-10

QiitaJava

なにかライブラリが無いかと思って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 セレクタを使えるのが手軽で良い。

from: https://qiita.com/petitviolet/items/e3b850fece36a176bf97