これは Java クローラー シリーズの 5 番目です。前回の記事では、Java クローラー サーバーがブロックされましたが、慌てずにサーバーを変更しましょう。主に IP ブロッキングとそれに対応する方法に焦点を当てて、クローラー対策戦略とクローラー対策方法について簡単に説明しました。これまでのいくつかの記事では、クローラーに関連するほぼすべての基本的な知識をカバーしました。この記事では、クローラーのアーキテクチャについて説明します。
前の章では、クローラー プログラムはすべてシングル スレッドでした。クローラー プログラムをデバッグすると、シングル スレッド クローラーでは問題は発生しません。ただし、シングルスレッド クローラーを使用してオンライン環境で Web ページを収集する場合、シングルスレッドによって 2 つの致命的な問題が発生します。
オンライン環境は、結果が正しく抽出できる限り、収集効率を気にしないローカルテストのようなものであってはなりません。時は金なりと言われるこの時代では、ゆっくりとデータを収集する時間を与えることは不可能なので、シングルスレッドのクローラー プログラムは機能しません。収集効率を改善し、コンピュータの使用率を高めるには、シングルスレッド モードをマルチスレッド モードに変更する必要があります。 マルチスレッド クローラー プログラムの設計は、シングルスレッド クローラー プログラムの設計よりもはるかに複雑です。ただし、高い同時実行性の下でデータ セキュリティを確保する必要のある他のビジネスとは異なり、マルチスレッド クローラーでは各ページが独立したエンティティと見なすことができるため、データ セキュリティに対する要件はそれほど高くありません。マルチスレッド クローラーをうまく機能させるには、2 つのことを適切に行う必要があります。1 つ目は、収集する URL の統一されたメンテナンスであり、2 つ目は URL の重複排除です。これら2点について簡単にお話ししましょう。 収集するURLを維持する マルチスレッド クローラー プログラムは、各スレッドが収集する独自の URL を維持するシングルスレッド プログラムのようにはなりません。この場合、各スレッドによって収集される Web ページは同じになります。これはマルチスレッドのコレクションではありませんが、ページを複数回収集しています。このため、収集する URL を統一的に管理する必要があります。各スレッドは、統合 URL メンテナンスから収集された URL を受け取り、収集タスクを完了します。ページ上で新しい URL リンクが見つかった場合、そのリンクは統合 URL によって管理されるコンテナーに追加されます。統合 URL メンテナンスに適したコンテナーをいくつか次に示します。
URL重複排除 URL 重複排除も、マルチスレッド収集における重要なステップです。重複を排除しないと、重複した URL が大量に収集され、収集効率が向上しません。たとえば、ページ分けされたニュース リストの場合、最初のページを収集するとページ 2、3、4、5 へのリンクが取得され、2 番目のページを収集するとページ 1、3、4、5 へのリンクが取得されます。収集する URL キューにはリスト ページ リンクが大量に存在し、収集が繰り返され、無限ループに陥る可能性があるため、URL の重複排除が必要になります。 URL の重複を排除する方法は多数あります。よく使用される方法をいくつか紹介します。
マルチスレッド クローラーに関する 2 つの重要な知識ポイントは誰もが知っています。以下に、シンプルなマルチスレッド クローラー アーキテクチャ図を示します。 マルチスレッド クローラー アーキテクチャ図 上記では、主にマルチスレッド クローラーのアーキテクチャ設計について学習しました。次に、Java マルチスレッド クローラーを試してみましょう。 Java マルチスレッド クローラーを練習するために、Hupu News のコレクションを例に挙げます。 Java マルチスレッド クローラーは、収集する URL を維持し、重複する URL を削除するように設計されています。ここではデモンストレーションのみなので、JDK の組み込みコンテナーを使用して完了させます。収集する URL を維持するためのコンテナとして LinkedBlockingQueue を使用し、重複する URL を削除するためのコンテナとして HashSet を使用します。以下は、Java マルチスレッド クローラーのコア コードです。詳細なコードは GitHub にアップロードされており、そのアドレスは記事の最後にあります。
効果を確認するために、5 つのスレッドを使用して Hupu ニュース リスト ページを収集します。プログラムを実行すると、次の結果が得られます。 マルチスレッドコレクションの結果 結果からわかるように、61 ページを収集するために 5 つのスレッドを開始し、合計 2 秒かかりました。効果は依然として良好であると言えます。 1 本のスレッドと比較して、ギャップがどのくらい大きいか確認してみましょう。スレッド数を 1 に設定してプログラムを再度開始すると、次の結果が得られます。 シングルスレッド実行結果 シングルスレッド クローラーが Hupu から 61 件のニュースを収集するのに 7 秒かかったことがわかります。これは、マルチスレッド クローラーのほぼ 4 倍の時間です。考えてみてください、これはたった 61 ページです。ページ数が増えるとギャップはどんどん大きくなるため、マルチスレッド クローラーの効率は依然として非常に高くなります。 分散クローラーアーキテクチャ 分散クローラー アーキテクチャは、大規模な収集プログラムのみが使用する必要があるアーキテクチャです。一般的に、単一マシンのマルチスレッドはビジネスニーズを解決できます。いずれにせよ、私は分散クローラー プロジェクトの経験がないので、これについては何も言うことはありません。しかし、技術者として、私たちは技術に対する熱意を持ち続ける必要があります。必要ではないですが、理解しておいても損はありません。私は多くの情報を調べ、以下の結論に達しました。 分散クローラー アーキテクチャは、考え方の面ではマルチスレッド クローラー アーキテクチャと同じです。シンプルな分散クローラー アーキテクチャにするには、マルチスレッドに基づいてわずかな改良を加えるだけで済みます。分散クローラー アーキテクチャではクローラーが異なるマシンに展開されるため、収集する URL と収集された URL をクローラー マシンのメモリに保存することはできません。 Redis や MongoDB などの特定のマシン上でそれらを管理する必要があります。各マシンは、LinkedBlockingQueue などのメモリ キューからリンクを取得するのではなく、そこからコレクション リンクを取得します。このようにして、シンプルな分散クローラー アーキテクチャが実現します。もちろん、ここには多くの詳細があります。分散アーキテクチャの経験がないので、どこから始めればよいのかわかりません。ご興味がございましたら、ぜひご連絡ください。 |
2021年5月14日、北京グランドメトロパークホテルで、智玲雲の2021年パートナーサロンが盛大に開...
ウェブサイトの一形態として、独立系ブログには独自の利点があります。操作が簡単、インタラクティブ性が強...
はじめに:中国の宿泊業界のオンライン予約量から判断すると、短期賃貸市場は依然としてニッチかつ断片化さ...
Kubernetes は、大規模なコンテナ管理のタスクの多くを自動化します。ただし、コンテナ化された...
中国インターネットネットワークインフォメーションセンター(CNNIC)による2008年中国検索エンジ...
ウェブマスター、まだやる気がありますか?昨年の628以降、ウェブマスターやSEO担当者の中には徐々に...
安価な VPS を購入したいですか? BandwagonHost から特別版 VPS を購入したいで...
今では、IT プロフェッショナルは、企業のビジネス開発に対するクラウド移行のメリットを明確に認識して...
QQマーケティングについては、これまで何度も皆さんと共有してきました。しかし、グループ内の一部の友人...
SEO に直面すると、多くの人が戸惑います。始め方がわからない人、理解できないと思う人、一生懸命努力...
序文皆さんはこんな状況に遭遇したことがあるでしょうか。何かを買うために食料品店に行き、支払いを済ませ...
現在、ショートビデオプラットフォームには、文房具ブラインドボックス、航空券ブラインドボックス、手作り...
ワンマン企業の Ramhost がプロモーションを実施しています。2009 年の設立から 5 年が経...
【はじめに】垂直電子商取引は100メートル短距離走というよりマラソンのようなもので、規模を追求するゲ...
郭平先生の2回の授業を聞いて、私は深く感動しました。 SEO がこのようにできるとは思ってもいません...