node.jsでのWebスクレイピング

Jennifer Aniston
Jennifer Anistonオリジナル
2025-02-24 08:53:09573ブラウズ

Web Scraping in Node.js

コアポイント

  • node.jsのWebクローリングには、リモートサーバーからソースコードをダウンロードし、cheerioなどのモジュールを使用して実装できます。 request
  • モジュールは、HTML文字列からDOMを構築および解析できるjQueryのサブセットを実装していますが、構造が不十分なHTMLに対処することは困難です。 <code>cheerio
  • requestcheerioを組み合わせると、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でゲットリクエストを作成する方法をすばやく確認します。

<code class="language-javascript">var request = require("request");

request({
  uri: "http://www.sitepoint.com",
}, function(error, response, body) {
  console.log(body);
});</code>

Webクロールの2番目のステップは、これもより難しいステップですが、ダウンロードされたソースコードからデータを抽出することです。クライアント側では、このタスクは、セレクターAPIやjQueryなどのライブラリを使用して簡単に実現できます。残念ながら、これらのソリューションは、DOMを照会できるという仮定に依存しています。残念ながら、node.jsはDOMを提供しません。または何かありますか?

cheerioモジュール

node.jsには組み込みのDOMがありませんが、HTMLソースコード文字列からDOMを構築できるモジュールがいくつかあります。 2つの一般的なDOMモジュールは、cheeriojsdomです。この記事では、次のコマンドを使用してインストールできます。 cheerio

<code class="language-bash">npm install cheerio</code>
モジュールは、jQueryのサブセットを実装しています。これは、多くの開発者が迅速に開始できることを意味します。実際、

はjQueryに非常に似ており、cheerioで実装されていないjQuery関数を使用しようとするのは簡単です。次の例は、cheerioを使用してHTML文字列を解析する方法を示しています。最初の行はプログラムにcheerioをインポートします。 <code>cheerio変数は、解析するHTMLフラグメントを保存します。 3行目では、cheerioを使用してHTMLを解析します。結果はhtml変数に割り当てられます。ドル記号は、伝統的にjQueryで使用されていたため、選択されました。行4では、CSSスタイルセレクターを使用して、 <code>cheerio 要素を選択します。最後に、リストの内部HTMLを印刷するには、$メソッドを使用します。 <ul></ul>

<code class="language-javascript">var request = require("request");

request({
  uri: "http://www.sitepoint.com",
}, function(error, response, body) {
  console.log(body);
});</code>

制限

cheerioは積極的な開発中であり、常に改善されています。ただし、まだいくつかの制限があります。 <code>cheerio最もイライラする側面は、HTMLパーサーです。 HTML解析は難しい問題であり、悪いHTMLを含む多くのWebページがあります。これらのページではcheerioはクラッシュしませんが、要素を選択できないことがあります。これにより、エラーがセレクターかページ自体であるかを判断することが困難になります。

jspro

クロール

次の例では、requestcheerioを組み合わせて、完全なWebクローラーを構築します。このサンプルクローラーは、JSPROホームページ上のすべての記事のタイトルとURLを抽出します。最初の2行は、必要なモジュールを例にインポートします。 JSPROホームページのソースコードを3行目から5行目からダウンロードします。次に、ソースコードを解析のためにcheerioに渡します。

<code class="language-bash">npm install cheerio</code>

JSPROソースコードを見ると、各投稿タイトルはentry-title要素に含まれるリンクであることがわかります。 7行目のセレクターは、すべての記事リンクを選択します。次に、すべての記事を反復するために<a></a>関数を使用します。最後に、記事のタイトルとURLは、それぞれリンクのテキストとeach()プロパティから取得されます。 href

結論

この記事は、node.jsでシンプルなWebクローラーを作成する方法を示しています。これがWebページをcraう唯一の方法ではないことに注意してください。ヘッドレスブラウザの使用など、他のテクノロジーがあります。これらは、より強力ですが、シンプルさや速度に影響を与える可能性があります。 Phantomjsヘッドレスブラウザに関する今後の記事をフォローアップしてください。

node.js webクローリングFAQ(FAQ)

node.js webクロールで動的コンテンツを処理する方法は?

Node.jsの動的コンテンツの処理は、コンテンツが非同期にロードされているため、少し難しい場合があります。 Pupteerのようなライブラリを使用できます。これは、DevToolsプロトコルを介してChromeまたはChromiumを制御するための高レベルAPIを提供するNode.jsライブラリであるライブラリです。 Puppeteerはデフォルトでヘッドレスモードで実行されますが、フル(ヘッドレスではない)クロムまたはクロムを完全に実行するように構成できます。これにより、ユーザーのインタラクションをシミュレートすることにより、動的なコンテンツをクロールできます。

Webページをrawったときに禁止されないようにするにはどうすればよいですか?

Webサイトが異常なトラフィックを検出した場合、WebクロールはIPを禁止することがあります。これを回避するために、IPアドレスの回転、遅延の使用、さらにはこれらの問題を自動的に処理するクロールAPIを使用するなどの手法を使用できます。

ログインする必要があるWebサイトからデータをcraうちにどのようにクロールするか?

ログインする必要があるWebサイトからのデータをクロールするには、操り人形を使用できます。 Puppeteerは、ログインフォームに記入して送信することにより、ログインプロセスをシミュレートできます。ログインしたら、必要なページに移動してデータをクロールすることができます。

クロールされたデータをデータベースに保存する方法は?

データをrawった後、選択したデータベースのデータベースクライアントを使用できます。たとえば、MongoDBを使用している場合は、MongoDB node.jsクライアントを使用してデータベースに接続してデータを保存できます。

ページングのあるウェブサイトからデータをクロールする方法は?

ページングのあるウェブサイトからデータをクロールするには、ループを使用してページを閲覧できます。各反復では、現在のページからデータをクロールし、[次のページ]ボタンをクリックして次のページに移動できます。

無限のスクロールを備えたWebサイトからデータをクロールする方法は?

無限のスクロールを備えたWebサイトからデータをクロールするには、操り人形師を使用してスクロールダウンをシミュレートできます。ループを使用して、新しいデータがロードされなくなるまで継続的にスクロールダウンできます。

Webクロールでエラーを処理する方法は?

エラー処理は、Webクロールで重要です。トライキャッチブロックを使用してエラーを処理できます。キャッチブロックでは、エラーメッセージをログに記録できます。これにより、問題をデバッグできます。

ajaxを使用してウェブサイトからデータをcraう?

Ajaxを使用するWebサイトからデータをクロールするには、操り人形を使用できます。操り人形師は、AJAXコールが完了してからデータを取得するのを待つことができます。

node.jsでWebクロールをスピードアップする方法は?

Webクロールをスピードアップするには、並列処理などの手法を使用して、異なるタブで複数のページを開き、同時にデータを取得できます。ただし、IPが禁止される可能性があるため、あまりにも多くのリクエストでWebサイトを過負荷にしないように注意してください。

Captchaを使用してWebサイトからデータをcraうちにクロールする方法は?

Captchaを使用したWebサイトからのデータをクロールするのは難しい場合があります。 Captchaを解決するためにAPIを提供する2captchaなどのサービスを使用できます。ただし、場合によっては、これは違法または不道徳な場合があることを忘れないでください。ウェブサイトの利用規約を常に尊重してください。

以上がnode.jsでのWebスクレイピングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。