Web クローラーは、特定のルールに従って World Wide Web から情報を自動的にクロールするプログラムまたはスクリプトです。データ分析を行ったり、コンテンツベースの処理アルゴリズムを学習したりするなど、大量のネットワーク データが必要な場合、クローラー プログラムが Web サイト上のデータをクロールし、ページごとに手動で検索してコピーすることはできません。現時点では、Web ページのデータを自動的にクロールするクローラーを作成する必要があります。このブログでは、Web クローラーの設計について説明します。
数日前、推奨アルゴリズム学習用のデータとして Dianping Web サイトから店舗データを取得する必要がありました。この店舗データを取得するためのクローラーを設計する必要がありました。要件に従って、このクローラは、ランドマークに基づいて店舗を分類する点評ページ上のランドマークの URL を取得し、これらの URL に基づいて店舗のリストをクロールし、リストに基づいて店舗の詳細を取得する必要があります。
一般的な Web クローラー システム アーキテクチャでは、主に次の側面を考慮する必要があります
- 終了スケジュール: クローラーの開始またはクローラーのステータスの監視に使用されます
- URL マネージャー: 情報を取得する必要があるリンクの保存と管理に使用されます、Web ページのダウンロード用 サーバーはこの情報を提供します
- Web ページ ダウンローダー: 分析のために Web ページのソース コードをダウンロードします
- Web ページ パーサー: ダウンロードされたソース コードを解析し、対応する情報を分析します
- ログ システム: Web ページパーサーは関連データを取得し、リンクは正常に解析され、ログ システムに保存されます。ログ システムは URL マネージャーと通信して不要な URL を削除します
上記は、クローラーが考慮する必要がある最も単純な部分です。次に、実装の詳細について説明します。私は Dianping クローラーを Java で作成しました。ここでは主に Java 言語を使用します。
- スケジューリング側 1 つ目はディスパッチ側です。これは、クローラを起動し、クローラを制御するためにさまざまなコマンドをディスパッチ側に送信するために使用されます。たとえば、ストア リストをクロールしたり、ストアの詳細を取得したりするためのクローラの制御はすべて実行されます。発送側を通じて。
- URL マネージャー URL マネージャーは、クロールする必要がある URL を保存するキューのようなもので、通常、クロールする必要がある URL をメモ帳に保存し、URL マネージャーがテキストを分析して把握できます。クロールする必要がある URL。
- Web ページ ダウンローダーと Web ページ パーサー
Java は Web ページのソース コードをローカル ディスクにダウンロードせずに直接リクエストできるため、これら 2 つの部分を組み合わせることができます。 パーサーについて: Jsoup を使用することをお勧めします。 Jsoup は、URL アドレスと HTML テキスト コンテンツを直接解析できる Java HTML パーサーです。 DOM、CSS、および jQuery のような操作メソッドを通じてデータを取得および操作するための、非常に低労力の API を提供します。 Jsoup の主な機能は次のとおりです:
- URL、ファイル、または文字列から HTML を解析します。
- DOM または CSS セレクターを使用してデータを検索し、
- HTML 要素、属性、およびテキストを操作します。例 以下のWebページの店舗名を解析したいです
Document doc = Jsoup.connect(requestUrl). header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0").get();Element basicBody = doc.getElementById("basic-info");String shopName = basicBody.getElementsByClass("shop-name").get(0).childNode(0).toString().trim();System.out.println(shopName);ヘッダーを設定する必要があることに注意してください。そうしないと、一部の Web サイトはクローラーへのアクセス要求を 403 で直接拒否します。完全なヘッダー情報はありません。
ログ システム ログ システムと URL マネージャーをメモ帳に保存することもでき、ログ テキストと URL マネージャー テキストの違いを比較することで、どの URL がキャプチャされたか、どの URL がキャプチャされていないかを確認できます。手動クロールに使用できる、無効な URL を保存する別のコードを作成することもできます。
- 上記は詳細の一部であり、発生する可能性のある問題について説明します。
Web サイト 403 アクセスが拒否されました:
- 現在、Web サイトは、クローラーが大量にアクセスする場合に、クローラー システムがデータを取得できないように処理されている必要があります。短期間に Web サイトへの接続数が増えると、相手のサーバーがあなたの IP を見つけてブロックします。この時点では、クローラーがアクセスを拒否するまでに 30 分または一定の時間がかかる場合があります。ウェブサイトへのアクセスを再開できます。現時点では、Java の例外処理メカニズムにより、クローラは一定期間休止してから、例外キャプチャを通じて 403 エラーについて学習し、HttpStatusException をキャプチャして他のサーバーによって検出されたかどうかを分析できます。そしてアクセスが拒否されました。これにより、クローラーの作業が一時停止されます。もちろん、IP が多数ある場合は、この例外をキャッチした後にコードを使用してプロキシ IP を変更することもできます。
try{ //连接并解析Html}catch (HttpStatusException e){//异常捕获 if (e.getStatusCode()==403){ try { logUtil.writeToHttpStatesException(); //日志写入 System.out.println("HttpStatusException! Program will sleep for "+configuration.forbiddenSleepTime/1000/60+"min."); Thread.sleep(configuration.forbiddenSleepTime); //进程休眠 } catch (InterruptedException e1) { e1.printStackTrace(); } } }
这个时候日志系统的用途就体现出来了,日志系统无形中提升了爬虫的稳定性,在抓取的时候可能会遇到各种异常,Socket超时,Http状态错误,数组越界,空指针等等,如果爬虫因为未知的错误而停止了运行,因为短期开发的过程中不可能想到所有可能出现的错误情况,第二次爬虫重新启动之后可以读取日志,这样就不会因为一个崩溃错误而导致爬虫把抓取过的信息再抓取一遍了。
- 并发需求 刚在说了,快速的访问会导致403拒绝访问,我抓取大众点评的时候,每抓取一次休息5秒钟才不会被服务器拒绝访问,所以说这样算下来,爬虫的效率是很慢的,一分钟最多十几个店铺,但是如果需要抓取很多店铺,这就需要好几天了。所以说,编写的爬虫系统必须具备横向扩展能力,用更多的机器同时抓取来节省宝贵的时间。比如有10台空闲机器,我们可以将爬虫分别部署在10台机器上进行抓取,这个时候就需要更改URL管理器让其变得更加智能,可以增加URL任务分配相关的代码,比如我有1000个网页需要抓取,有5台电脑,URL管理器应该为第一台电脑分配抓取1-200个URL,第二个机器201-400,以此类推,这样的代码也很好写,小学数学问题就可以解决。
- 工具类设计 爬虫设计完之后还需要设计一些小工具类来完成一些基本操作,比如文件合并,用来合并多台机器上抓取的信息,条目去重复,用来删掉重复抓取的店铺(可能的话),过滤器:用来过滤不要的店铺之类的。这样的工具类也是必不可少的。
以下是我设计的爬虫系统的结构:
因为我的爬虫需要抓取三种不同的网页,所以我设计了一个CrawlerManager类来管理调度不同类型的爬虫,这个Manager使得整个爬虫系统更加易于维护和调整,并且使得整个程序的逻辑结构更加清楚;
之后就可以开始抓取啦~
以上店铺数据仅为程序测试用,并未作为商业用途使用,如构成侵权,请直接留言,我会删除文章。
我的博客MikeTech app现已登陆iPhone和Android

HTMLの中心的な目的は、ブラウザがWebコンテンツを理解して表示できるようにすることです。 1。HTMLは、タグなどのタグを介してWebページの構造とコンテンツを定義します。 3.HTMLは、ユーザーの相互作用をサポートするフォーム要素を提供します。 4. HTMLコードの最適化は、HTTP要求の削減やHTMLの圧縮など、Webページのパフォーマンスを改善できます。

htmltagsareSterenceforwebdevelovementasyStheStructureanhandhancewebpages.1)theydefineLayout、semantics、and-interactivity.2)semanticagsimprovecessibility.3)opeusofusofagscanoptimizeperformanceandensurecross-brows-compativeation。

コードの読みやすさ、保守性、効率を向上させるため、一貫したHTMLエンコーディングスタイルは重要です。 1)低ケースタグと属性を使用します。2)一貫したインデントを保持し、3)シングルまたはダブルの引用符を選択して固執する、4)プロジェクトのさまざまなスタイルの混合を避け、5)きれいなスタイルやEslintなどの自動化ツールを使用して、スタイルの一貫性を確保します。

Bootstrap4にマルチプロジェクトカルーセルを実装するソリューションBootstrap4にマルチプロジェクトカルーセルを実装するのは簡単な作業ではありません。ブートストラップですが...

マウススクロールイベントの浸透の効果を実現する方法は? Webを閲覧すると、いくつかの特別なインタラクションデザインに遭遇することがよくあります。たとえば、DeepSeekの公式ウェブサイトでは、...

HTMLビデオのデフォルトの再生コントロールスタイルは、CSSを介して直接変更することはできません。 1. JavaScriptを使用してカスタムコントロールを作成します。 2。CSSを介してこれらのコントロールを美化します。 3. video.jsやPLYRなどのライブラリを使用すると、互換性、ユーザーエクスペリエンス、パフォーマンスを検討してください。プロセスを簡素化できます。

携帯電話でネイティブセレクトを使用する際の潜在的な問題は、モバイルアプリケーションを開発するときに、ボックスを選択する必要があることがよくあります。通常、開発者...

お使いの携帯電話でネイティブ選択を使用することの欠点は何ですか?モバイルデバイスでアプリケーションを開発する場合、適切なUIコンポーネントを選択することが非常に重要です。多くの開発者...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









