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 ファイルを追加する。
これで準備完了のはず?
そろそろ maven 使おう
実装
大体の実装としてはBasic Crawlerで十分だと思う。
BaseCrawler.javaでOverride
してあるvisit
とshoudVisit
では、クロールする 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