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

Jennifer Aniston
リリース: 2025-02-24 08:53:09
オリジナル
569 人が閲覧しました

Web Scraping in Node.js

コアポイント

<ul>
  • 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でゲットリクエストを作成する方法をすばやく確認します。

    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モジュールは、cheeriojsdomです。この記事では、次のコマンドを使用してインストールできます。 cheerio

    npm install cheerio
    ログイン後にコピー
    ログイン後にコピー
    モジュールは、jQueryのサブセットを実装しています。これは、多くの開発者が迅速に開始できることを意味します。実際、

    は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

    クロール

    次の例では、requestcheerioを組み合わせて、完全な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クロールで動的コンテンツを処理する方法は?

    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 までご連絡ください。
    著者別の最新記事
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート