はじめに
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 | プロキシパスワードを指定します。 |