Edited at

Javaでクローラーを作る(crawler4j)

More than 3 years have passed since last update.


はじめに

Javaでクローラーを作るため色々調べていたのですが、crawler4jというオープンソースライブラリが使いやすそうでしたので自分なりにまとめていきたいと思います。


導入について

crawler4jは非常に多くのライブラリに依存しているようですので、Mavenなどの依存関係を解決してくれるビルドツールを利用するのがよさそうです。Mavenの場合は以下の記述をpomに足してビルドするだけ。


pom.xml

    <dependency>

<groupId>edu.uci.ics</groupId>
<artifactId>crawler4j</artifactId>
<version>4.1</version>
</dependency>


動かし方について

基本的な動かし方は、以下のGithubページのREADMEに書いてありますので割愛いたします。

https://github.com/yasserg/crawler4j

こちらに書いてあるサンプルコードで私でも簡単に動かすことができました。


設定

クローロング先のサイト様に甚大な被害を与えぬよう、最低限の設定値を一覧化します。

設定
説明

crawlStorageFolder
クロール中のワークデータを格納するディレクトリを指定します。

resumableCrawling
中断したクロールを再開するかどうかを示すフラグ値。
TRUEにした場合、最初から区ローリングを始めたい場合は、ワークディレクトリを手動で削除する必要があるようです。
デフォルトFALSE

maxDepthOfCrawling
最大のクロールの深さを指定します。
たとえば、A - > B - > C - > Dというページ階層があり、Aがシードページ(起点)だったとして、設定値を2にした場合は、Dはクローリング対象となりません。
デフォルトは-1に設定されており、無制限を表します。

maxPagesToFetch
クロールするページの最大数を指定します。
デフォルトは-1に設定されており、無制限を表します。

userAgentString
ユーザーエージェントを指定します。デフォルトは以下の値になります。
crawler4j (https://github.com/yasserg/crawler4j/)

politenessDelay
リクエストの間隔を指定します。
1.3以降のバージョンでは、デフォルトで200ミリ秒の待機時間を設けているようです。

includeHttpsPages

includeBinaryContentInCrawling
画像やPDFなどのバイナリデータをクロールするかを指定します

maxConnectionsPerHost
1ホストあたりの最大接続数を指定します。
ソースを読む限りデフォルト100に設定されています。

maxTotalConnections
トータルの最大接続数を指定します。
ソースを読む限りデフォルト100に設定されています。

socketTimeout
ソケットのタイムアウト値を指定します。
ソースを読む限りデフォルト20秒に設定されています。

connectionTimeout
ソースを読む限りデフォルト20秒に設定されています。

maxOutgoingLinksToFollow
あまりよく分かってませんが、1ページあたりのリンク実行の最大数を示しているように思います。
ソースを読む限りデフォルト5000に設定されています。

maxDownloadSize
ソースを読む限りデフォルト1048576に設定されています。

followRedirects
ページ内のリダイレクト記述に従うべきかどうか。
デフォルトTRUEに設定されています。

proxyHost
プロキシホストを指定します。

proxyPort
プロキシポートを指定します。

proxyUsername
プロキシユーザー名を指定します。

proxyPassword
プロキシパスワードを指定します。