クロールは、単一のURIのコンテンツを取得するだけの場合よりも大きなものです。いくつかのページの内容を取得したいだけなら、Crawler4J
のようなものを使うと本当のメリットはありません。
例を見てみましょう。 Webサイトをクロールしたいとします。要件は、次のようになります。
- 与えるベースURI(ホームページ)は
- は、各ページからのすべてのURIを取り、あまりにもそれらの内容を取得します。
- 取得するURIごとに再帰的に移動します。
- このウェブサイト内にあるURIの内容のみを取得します(別のウェブサイトを参照する外部URIが存在する可能性がありますが、必要ありません)。
- 円形クロールを避ける。ページAはページB(同じサイトの)のURIを持っています。ページBはページAのURIを持っていますが、すでにページAのコンテンツを取得しています(
About
ページにはHome
ページのリンクがありますが、すでにHome
ページの内容がありますので再度訪問しないでください)。
- クロール操作はマルチスレッドである必要があります
- ウェブサイトは広大です。それは多くのページを含んでいます。
Home
ページから始まる50個のURIを検索したいだけです。
これは簡単なシナリオです。 Jsoup
でこれを解決してみてください。この機能はすべてあなたが実装する必要があります。 Crawler4Jまたはそのようなクローラマイクロフレームワークであれば、上記のアクションの実装が必要です。 Jsoup
の強い性質は、あなたがそのコンテンツをどうするかを決めるときに輝きます。
解析の要件をいくつか見てみましょう。
- は
- する(
HTML
仕様に準拠していないタグ)
- 削除スクリプトタグ
これは無効なタグを削除すべての画像を取得するページのすべての段落を取得しますJsoup
が再生されます。もちろん、ここにはいくつかの重複があります。 Crawler4J
またはJsoup
の両方で可能なものもありますが、同等ではありません。 Jsoup
からコンテンツを取得するメカニズムを削除しても、まだまだ素晴らしいツールになります。 Crawler4J
が検索を取り除くと、機能の半分が失われます。
実際のシナリオで同じプロジェクトで両方を使用しました。 最初の例で言及したすべての問題に対して、Crawler4J
という強力な点を利用してサイトをクロールしました。その後、検索した各ページの内容をJsoup
に渡し、必要な情報を抽出しました。私はどちらか一方を使用していないでしょうか?はい、できましたが、欠落している機能をすべて実装する必要がありました。
したがって、Crawler4J
は、構文解析のための単純な操作(1行に画像を抽出することができます)があるクローラですが、複雑なCSS
クエリの実装はありません。 Jsoup
は、HTTP
リクエスト用のシンプルなAPIを提供するパーサーです。より複雑なものについては、実装はありません。