コアポイント
<ul>cheerio
などのモジュールを使用して実装できます。 request
request
とcheerio
を組み合わせると、Webページの特定の要素を抽出するための完全なWeb Crawlerを作成できますが、動的なコンテンツの処理、禁止の避け、ログインまたは使用を必要とするWebサイトの処理はより複雑で、必要になる場合があります。追加のツールまたは戦略。 Web Crawlerは、Webページにプログラム的にアクセスし、それらからデータを抽出するソフトウェアです。コンテンツの重複などの問題のため、Webクローリングはやや物議を醸すトピックです。ほとんどのウェブサイトの所有者は、公開されているAPIを介してデータにアクセスすることを好みます。残念ながら、多くのWebサイトはAPIの品質が低く、APIもまったくありません。これにより、多くの開発者がWebクロールに目を向けることを余儀なくされました。この記事では、node.jsで独自のWeb Crawlerを実装する方法を教えてください。 Web Crawlingの最初のステップは、リモートサーバーからソースコードをダウンロードすることです。 「node.jsでhttpリクエストを作成する」で、読者はrequest
モジュールのダウンロードページの使用方法を学びました。次の例では、node.jsでゲットリクエストを作成する方法をすばやく確認します。
var request = require("request"); request({ uri: "http://www.sitepoint.com", }, function(error, response, body) { console.log(body); });
Webクロールの2番目のステップは、これもより難しいステップですが、ダウンロードされたソースコードからデータを抽出することです。クライアント側では、このタスクは、セレクターAPIやjQueryなどのライブラリを使用して簡単に実現できます。残念ながら、これらのソリューションは、DOMを照会できるという仮定に依存しています。残念ながら、node.jsはDOMを提供しません。または何かありますか?
cheerioモジュール
node.jsには組み込みのDOMがありませんが、HTMLソースコード文字列からDOMを構築できるモジュールがいくつかあります。 2つの一般的なDOMモジュールは、cheerio
とjsdom
です。この記事では、次のコマンドを使用してインストールできます。
cheerio
npm install cheerio
はjQueryに非常に似ており、cheerio
で実装されていないjQuery関数を使用しようとするのは簡単です。次の例は、cheerio
を使用してHTML文字列を解析する方法を示しています。最初の行はプログラムにcheerio
をインポートします。 <code>cheerio変数は、解析するHTMLフラグメントを保存します。 3行目では、cheerio
を使用してHTMLを解析します。結果はhtml
変数に割り当てられます。ドル記号は、伝統的にjQueryで使用されていたため、選択されました。行4では、CSSスタイルセレクターを使用して、 <code>cheerio
要素を選択します。最後に、リストの内部HTMLを印刷するには、$
メソッドを使用します。 <ul>
var request = require("request"); request({ uri: "http://www.sitepoint.com", }, function(error, response, body) { console.log(body); });
cheerio
は積極的な開発中であり、常に改善されています。ただし、まだいくつかの制限があります。 <code>cheerio最もイライラする側面は、HTMLパーサーです。 HTML解析は難しい問題であり、悪いHTMLを含む多くのWebページがあります。これらのページではcheerio
はクラッシュしませんが、要素を選択できないことがあります。これにより、エラーがセレクターかページ自体であるかを判断することが困難になります。
jspro
クロール次の例では、request
とcheerio
を組み合わせて、完全なWebクローラーを構築します。このサンプルクローラーは、JSPROホームページ上のすべての記事のタイトルとURLを抽出します。最初の2行は、必要なモジュールを例にインポートします。 JSPROホームページのソースコードを3行目から5行目からダウンロードします。次に、ソースコードを解析のためにcheerio
に渡します。
npm install cheerio
JSPROソースコードを見ると、各投稿タイトルはentry-title
要素に含まれるリンクであることがわかります。 7行目のセレクターは、すべての記事リンクを選択します。次に、すべての記事を反復するために<a></a>
関数を使用します。最後に、記事のタイトルとURLは、それぞれリンクのテキストとeach()
プロパティから取得されます。 href
結論
この記事は、node.jsでシンプルなWebクローラーを作成する方法を示しています。これがWebページをcraう唯一の方法ではないことに注意してください。ヘッドレスブラウザの使用など、他のテクノロジーがあります。これらは、より強力ですが、シンプルさや速度に影響を与える可能性があります。 Phantomjsヘッドレスブラウザに関する今後の記事をフォローアップしてください。
node.js webクローリングFAQ(FAQ)
node.js webクロールで動的コンテンツを処理する方法は?Webページをrawったときに禁止されないようにするにはどうすればよいですか?
ログインする必要があるWebサイトからデータをcraうちにどのようにクロールするか?
クロールされたデータをデータベースに保存する方法は?
ページングのあるウェブサイトからデータをクロールするには、ループを使用してページを閲覧できます。各反復では、現在のページからデータをクロールし、[次のページ]ボタンをクリックして次のページに移動できます。
無限のスクロールを備えたWebサイトからデータをクロールするには、操り人形師を使用してスクロールダウンをシミュレートできます。ループを使用して、新しいデータがロードされなくなるまで継続的にスクロールダウンできます。
エラー処理は、Webクロールで重要です。トライキャッチブロックを使用してエラーを処理できます。キャッチブロックでは、エラーメッセージをログに記録できます。これにより、問題をデバッグできます。
Ajaxを使用するWebサイトからデータをクロールするには、操り人形を使用できます。操り人形師は、AJAXコールが完了してからデータを取得するのを待つことができます。
Webクロールをスピードアップするには、並列処理などの手法を使用して、異なるタブで複数のページを開き、同時にデータを取得できます。ただし、IPが禁止される可能性があるため、あまりにも多くのリクエストでWebサイトを過負荷にしないように注意してください。
以上がnode.jsでのWebスクレイピングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。