petitviolet blog

    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