2016-01-19 10 views
7

私はページの内容を取得し、その特定の部分を抽出したいと考えています。私が知る限り、そのようなタスクのための少なくとも2つのソリューションがあります:Crawler4jJsoupCrawler4jとJsoupのクロールとJavaでの解析について

両者は、ページのコンテンツを取得し、そのページの下位部分を抽出することができます。私はそれらの違いは何か分かりません。回答としてマークされsimilar questionは、あります:

Crawler4jJsoupがパーサで、クローラです。

しかし、私はちょうどチェックしCrawler4jがページをクロールしますが、その内容を解析していることができない間だけ、Jsoup 1.8.3は、構文解析機能に加えて、ページをクロールも可能です。

したがって、Crawler4jJsoupの違いを明確にすることはできますか?

答えて

20

クロールは、単一のURIのコンテンツを取得するだけの場合よりも大きなものです。いくつかのページの内容を取得したいだけなら、Crawler4Jのようなものを使うと本当のメリットはありません。

例を見てみましょう。 Webサイトをクロールしたいとします。要件は、次のようになります。

  1. 与えるベースURI(ホームページ)は
  2. は、各ページからのすべてのURIを取り、あまりにもそれらの内容を取得します。
  3. 取得するURIごとに再帰的に移動します。
  4. このウェブサイト内にあるURIの内容のみを取得します(別のウェブサイトを参照する外部URIが存在する可能性がありますが、必要ありません)。
  5. 円形クロールを避ける。ページAはページB(同じサイトの)のURIを持っています。ページBはページAのURIを持っていますが、すでにページAのコンテンツを取得しています(AboutページにはHomeページのリンクがありますが、すでにHomeページの内容がありますので再度訪問しないでください)。
  6. クロール操作はマルチスレッドである必要があります
  7. ウェブサイトは広大です。それは多くのページを含んでいます。 Homeページから始まる50個のURIを検索したいだけです。

これは簡単なシナリオです。 Jsoupでこれを解決してみてください。この機能はすべてあなたが実装する必要があります。 Crawler4Jまたはそのようなクローラマイクロフレームワークであれば、上記のアクションの実装が必要です。 Jsoupの強い性質は、あなたがそのコンテンツをどうするかを決めるときに輝きます。

解析の要件をいくつか見てみましょう。

  1. する(HTML仕様に準拠していないタグ)
  2. 削除スクリプトタグ

これは無効なタグを削除すべての画像を取得するページのすべての段落を取得しますJsoupが再生されます。もちろん、ここにはいくつかの重複があります。 Crawler4JまたはJsoupの両方で可能なものもありますが、同等ではありません。 Jsoupからコンテンツを取得するメカニズムを削除しても、まだまだ素晴らしいツールになります。 Crawler4Jが検索を取り除くと、機能の半分が失われます。

実際のシナリオで同じプロジェクトで両方を使用しました。 最初の例で言及したすべての問題に対して、Crawler4Jという強力な点を利用してサイトをクロールしました。その後、検索した各ページの内容をJsoupに渡し、必要な情報を抽出しました。私はどちらか一方を使用していないでしょうか?はい、できましたが、欠落している機能をすべて実装する必要がありました。

したがって、Crawler4Jは、構文解析のための単純な操作(1行に画像を抽出することができます)があるクローラですが、複雑なCSSクエリの実装はありません。 Jsoupは、HTTPリクエスト用のシンプルなAPIを提供するパーサーです。より複雑なものについては、実装はありません。

関連する問題