Node Unblockerを使ったウェブスクレイピング

このチュートリアルではNode Unblockerとは何か、それがウェブスクレイピングにどう役立つのか、そしてその使い方を学んでいきます
3 分読
Node Unblocker for Web Scraping

 Node.jsを使ってウェブスクレイピングをしていると、ネット検閲にあったり、プロキシが低速だったりなどの問題に遭遇することがあります。そんな時に役立つのが、 Node Unblocker というツールです。

Node Unblockerは ウェブプロキシ ツールの一種で、これを使えばネット検閲を回避し、地域制限のあるコンテンツにアクセスできるようになります。Node Unblockerはオープンソースのツールで、データの高速中継、調整が用意な カスタマイズオプション、複数のプロトコルのサポートなど、様々な機能を備えています。Node Unblockerを使用すると、ネットの制限を回避し、本来はアクセスできないはずだったウェブサイトからもデータを効率的に収集できます。

この記事ではUnblockerをウェブスクレイピングで使うことの利点を含め、Node Unblockerについての全てを学んでいきます。また、Node Unblockerを使って地域制限のあるコンテンツをスクレイピングするために使えるプロキシプログラムを作成する方法も学びます。

Node Unblockerを使用することの利点

Node Unblockerは様々な特徴・機能を備えており、ウェブコンテンツへアクセスする際の障害を取り払える貴重なツールとなっています。Node Unblockerはオープンソースのソリューションであり、次のような特徴を持っています。

  • 、クライアントと目的のウェブサイトの間の仲介役
  • データを効率的に高速中継: Node Unblockerはバッファリングせずにクライアントにデータを配信できるという点で優れています。その結果、 Node Unblockerは現在利用可能なツールの中で、最も速いプロキシツールの1つとなっています。
  • 使いやすい: Node Unblocker のユーザーインターフェースはとても使いやすく 、スキルレベルに関わらずどなたでも簡単に使用できます。Node Unblockerには実装がしやすくなる シンプルなAPI が用意されており、 既存のプロジェクトに簡単に取り入れるようになっています。
  • 高度なカスタマイズが可能: Node Unblockerは、その時々に必要な要件に応じてプロキシ設定を柔軟にカスタマイズし、スクレイピングすることができます。例えばリクエストのヘッダーやレスポンス処理などのパラメーターを設定することで、スクレイピングプロセスの効率を上げつつ、自分に都合の良いものにカスタマイズできます。
  • 複数のプロトコルをサポート: Node UnblockerはHTTP、HTTPS、WebSocketなどの様々なプロトコルをサポートしています。そのため、スクレイピングの際の多様なシナリオにシームレスに対応でき、開発者の都合の良い形で様々なデータの配信元と柔軟にデータのやりとりをすることができます。

Node Unblockerの使用準備

以上で、Unblockerの持つ特徴を全て学ぶことができました。では、さっそく実際に使ってみましょう。まずはシステムに Node.js と npm がインストールされていることを確認してください。また、プロジェクトをテストするためのウェブブラウザと、プロジェクトをホストするための無料の Renderアカウント も用意してください。

以上の準備ができたら、ウェブプロキシを作成していきます。まずは node-unblocker-proxyという名前のフォルダを作成してから、それをターミナルで開き、次のコマンドを実行して新しいNode.jsプロジェクトを作成します。

npm init -y

その後、次のコマンドを実行して必要な依存関係をインストールします。

npm install express unblocker

Express とはウェブサーバーの構築に使うウェブアプリケーションフレームワークです。 また、node-unblocker とはウェブプロキシを作成する際に役立つnpmパッケージです。

プロキシ機能を実装するためのスクリプトを作成する

すべての依存関係がインストールできたら、ウェブプロキシ用のスクリプトを実装していきます。

プロジェクトのルートフォルダに index.js ファイルを作成し、次のコードを貼り付けてください:

// import required dependencies
const express = require("express");
const Unblocker = require("unblocker");

// create an express app instance
const app = express();
// create a new Unblocker instance
const unblocker = new Unblocker({ prefix: "/proxy/" });

// set the port
const port = 3000;

// add the unblocker middleware to the Express application
app.use(unblocker);

// listen on specified port
app.listen(port).on("upgrade", unblocker.onUpgrade);
console.log(`proxy running on http://localhost:${port}/proxy/`);

このコードでは、必要な依存関係をインポートし、 Express アプリのインスタンスを作成しています。その後、新しい Node Unblocker のインスタンスを作成します。Node Unblockerのインスタンスを通して、様々な 設定が使えるようになります。ここでは、 prefix オプションのみを設定しています。prefixオプションではプロキシを使う際にURLの始めの部分に入れるパスを指定します。

Node UnblockerにはExpressと互換のあるAPIが用意されているため、簡単にExpress
アプリケーションに統合できます。ここでは、Expressインスタンスの use () メソッドを呼び出し、それに Node Unblocker のインスタンスを渡しています。これでNode Unblockerが使えるようになりました。次に listen () メソッドを使用し、Expressアプリケーションを起動させます。 .on ("upgrade", unblocker.onUpgrade) の部分は、WebSocket接続がUnblockerによって正しく処理されるようにするためのものです。

ローカル環境でプロキシをテスト

実装したプロキシをローカルでテストするには、ターミナルで次のコマンドを実行してください。

node index.js

プロキシ経由で行われる各リクエストの詳細情報を表示させたい場合は、 DEBUG=unblocker:* node index.js コマンドを使用してください。

次に適当なURLを見つけ、そのプレフィックスとして localhost: 3000/proxy/ (例、 localhost/proxy/https://brightdata.com/)を付けて、ウェブブラウザで開きます。

 Bright Data のホームページが表示されるはずです。ブラウザの ネットワーク タブから検証すると、すべてのリクエストがプロキシを経由していることがわかります。 ネットワーク タブの ドメイン 列をご覧ください:

ローカル環境でのプロキシテスト用コマンドとブラウザでのチェック

プロキシをRenderにデプロイ

プロキシの正常な挙動が確認できたので、次はいよいよデプロイしていきます。その前に、プロジェクトルートフォルダにある package.json ファイルを開き、 スクリプトの キーと値のペアを次のように変更してください。

"scripts": {
   "start": "node index"
}

こうすることで、Render上でExpressウェブサーバーを起動させるためのコマンドが実行できるようになります。

ウェブプロキシをデプロイし、プロキシプロジェクトをGitHubのリポジトリに アップロード します。次に、 Renderアカウント にサインインしてください:

Render上でプロキシプロジェクトをセットアップし、デプロイする

 New + ボタンをクリックし、 Web Serviceを選択します:

 Connect ボタンを選んで、Renderとプロキシプロジェクトのリポジトリをつなげます。Renderがリポジトリにアクセスできない場合、 アカウント の設定を調節する必要があります。この設定が必要なのは、Renderが特定のGitHubレポジトリにアクセスできるように設定していない場合のみです:

ウェブサービスの使用に必要な詳細情報を入力し、ページの下部の Create Web Service を選択します:

 Yarnを使う場合は起動コマンドをそのままにしてください。npmを使う場合は npm run start に変更することもできます。

ウェブプロキシが正常にデプロイされたら、次はテストを行います。適当なURLを使用し、先ほどデプロイした <DEPLOYED-APP-URL>/proxy/ をプレフィックスとして付けます。(例、 https://node-web-proxy-gvn6.onrender.com/proxy/https://brightdata.com/)ウェブブラウザで開いてみます。

ブラウザの [ネットワーク] タブを調べると、すべてのリクエストが先ほどデプロイしたプロキシを経由していることがわかります:

プロキシ経由でスクレイピングリクエストを送る

すべてのリクエストが先ほどデプロイしたプロキシを経由していることが確認できたら、次にスクレイピングリクエストを送ります。このチュートリアルでは Puppeteer ライブラリを使用しますが、 Cheerio や Nightmareなど、他のテストライブラリを使うこともできます。

Puppeteerをインストールしていない場合は、 npm i puppeteerを実行して、Puppeteerをインストールしてください。次に、プロジェクトのルートフォルダに scrape.js ファイルを作成し、次のコードを追加します。

// import puppeteer
const puppeteer = require("puppeteer");

const scrapeData = async () => {
   // launch the browser
   const browser = await puppeteer.launch({
    headless: false,
   });

   // open a new page and navigate to the defined URL
   const page = await browser.newPage();
   await page.goto("<DEPLOYED-APP-URL>/proxy/https://brightdata.com/blog");

   // get the content of the webpage
   const data = await page.evaluate(() => {
    // variable to hold all the posts data
    let blogData = [];

    // extract all elements with the specified class
    const posts = document.querySelectorAll(".post_item");

    // loop through the posts object, extract required data and push it to the blogData array
    for (const post of posts) {
        const title = post.querySelector("h5").textContent;
        const link = post.href;
        const author = post
            .querySelector(".author_box")
            .querySelector(".author_box__details")
            .querySelector("div").textContent;

        const article = { title, link, author };

        blogData.push(article);
    }

    return blogData;
   });

   // log the data to the console
   console.log(data);

   // close the browser instance
   await browser.close();
};

// call the scrapeData function
scrapeData();

その際、忘れずに <DEPLOYED-APP-URL> の部分をRenderにデプロイしたアプリのURLに書き換えておきましょう。

このサンプルコードはPuppeteerの使用準備を行い、 Bright Dataのブログの記事データを収集するためのものです。Bright Dataのウェブサイトに掲載されているブログ記事のカードは全て .post_itemというクラス内に入れられています。このコードはすべての投稿を取得します。その過程では、 posts オブジェクトをループ処理し、各投稿のタイトル、リンク、作成者を抽出してから、そのデータを BlogData 配列に入れ込み、最後にその全てをコンソールに表示させるという手順が取られています。

Node Unblockerに最適なプロキシを選ぶためには

Node Unblockerでプロキシを使う際は、プロジェクトの要件や起こりうる問題に対応できるプロキシサービスを選ぶ必要があります。プロキシサービスを選ぶ際は次のようなポイントに注目してください。

  1. パフォーマンスと信頼性:シームレスにデータへアクセスし、効率よくウェブスクレイピングを行うためには、通信速度が速く、可用性が高いプロキシサービスを使う必要があります。
  2. 地域カバー率:幅広い地域をカバーしているプロキシサービスを選びましょう。そうすることで、地域制限を回避したり、特定地域にローカライズされたコンテンツにアクセスできます。
  3. IPローテーション:IPローテーションを提供するプロキシサービスを使うことで、ウェブサイトにブロックされるリスクを減らせます。IPローテーションとはリクエストのたびに使うIPを変えるサービスのことで、これを利用することでブロックを回避しやすくなります。
  4. セキュリティプロトコル:特に機密情報を扱う場合は、SSL暗号化などの強固なセキュリティ対策を提供するサービスを利用することで、データの整合性とプライバシーを保護しやすくなります。
  5. スケーラビリティ:スクレイピングのニーズが高まった場合に、それに合わせてプロキシサービスをスケールアップさせられるかどうかを考えてみましょう。リソースを柔軟にスケールアップさせられるサービスでなければ、スクレイピング作業の規模と複雑さが増した場合に対応できません。
  6. サポートとドキュメント:特に複雑な構成で使用する場合、包括的なサポートと詳細なドキュメントがあれば、Node Unblockerの統合作業が大幅にやりやすくなります。

これらのポイントを踏まえてサービスを注意深く比較することで、その時点で必要なことだけでなく、将来的な成長やスクレイピング作業の変化にも対応できるプロキシサービスを選ぶことができます。

まとめ

Node UnblockerはNode.jsでウェブスクレイピングをする際に有用なツールであり、これを使うことでネット検閲を回避し、地域制限のあるコンテンツにアクセスできるようになります。Node Unblockerはとても優秀なウェブスクレイピングツールで、インターフェイスがわかりやすく、豊富なカスタマイズオプションが用意されていて、さらに複数のプロトコルがサポートされています。この記事ではNode Unblockerとは何か、それがウェブスクレイピングにどう役立つのか、そしてその使い方などを学びました。

データ中心の現代社会において、価値のある情報を収集し、それを分析するためにはウェブスクレイピングが不可欠です。一方で、ウェブスクレイピングではIPブロッキングや通信頻度制限、地域制限などが原因で、データ収集作業が妨げられ、重要なデータの取得が失敗してしまうことがよくあります。

Bright Data はこういった課題に対処する包括的なプラットフォームを提供します。Bright Dataは住宅用IPISP登録済みIPデータセンターIPモバイルIPを含んだ広大なネットワークを保有しており、このネットワークを利用することで、世界中の様々なIPアドレスを経由してスクレイピング時のリクエストをルーティングできるようになります。プロキシを使うことで匿名性が保証されるだけでなく、地域制限のあるコンテンツにアクセスでき、データ収集の妨げとなる障害を取り除けます。

どのBright Dataプロキシが必要かわからない場合今すぐ登録して、当社のデータ専門家に相談し、ニーズにあったソリューションを探しましょう。

クレジットカードは必要ありません

あなたは下記にもご興味がおありかもしれません

web scraping with claude blog image
ウェブデータ

2025年のクロードによるウェブスクレイピング

Pythonを使ってWebスクレイピングを自動化し、構造化データを楽に抽出するClaude AIの使い方を学ぶ。
18 分読
Building AI-Ready Vector Datasets for LLMs blog image
AI

LLMのためのAI対応ベクトルデータセット構築:Bright Data、Google Gemini、Pineconeを使ったガイド

大規模言語モデル(LLM)は、私たちが情報にアクセスし、インテリジェントなアプリケーションを構築する方法を変革しています。LLMの可能性を最大限に引き出すには、特にドメイン固有の知識や独自のデータを使用する場合、高品質で構造化されたベクトルデータセットを作成することが重要です。LLMの性能と精度は、入力データの品質に直接結びついています。準備不足のデータセットは劣悪な結果をもたらす可能性があり、一方、十分にキュレーションされたデータセットはLLMを真のドメイン・エキスパートに変えることができます。 このガイドでは、AIに対応したベクターデータセットを生成するための自動パイプラインの構築方法を順を追って説明する。 課題:LLMのためのデータ収集と準備 LLMは膨大な汎用テキストコーパスで学習されますが、商品関連のクエリへの回答、業界ニュースの分析、顧客フィードバックの解釈など、特定のタスクやドメインに適用すると、不足することがよくあります。LLMを真に役立てるには、ユースケースに合わせた高品質のデータが必要です。 このデータは通常、ウェブ上に分散していたり、複雑なサイト構造の背後に隠されていたり、ボット対策によって保護されていたりする。 当社の自動ワークフローは、データセット作成の最も困難な部分を処理する合理化されたパイプラインでこれを解決します: コア技術の概要 パイプラインを構築する前に、関連するコアテクノロジーと、それぞれがワークフローをどのようにサポートしているかを簡単に見ておこう。 ブライトデータスケーラブルなウェブデータ収集 AIに対応したベクターデータセットを作成するための最初のステップは、関連性のある高品質なソースデータを収集することです。ナレッジベースやドキュメンテーションのような内部システムから得られるものもあるが、大部分は公共のウェブから得られることが多い。 しかし、最近のウェブサイトは、CAPTCHA、IPレート制限、ブラウザフィンガープリントなどの高度なボット対策メカニズムを使用しているため、大規模なスクレイピングは困難である。 Bright Dataは、データ収集の複雑さを抽象化するWeb Unlocker APIでこの課題を解決します。プロキシのローテーション、CAPTCHAの解決、ブラウザのエミュレーションを自動的に処理するため、データへのアクセス方法ではなく、データに集中することができます。 Google Gemini: インテリジェント・コンテンツ・トランスフォーメーション Geminiは、Googleによって開発された強力なマルチモーダルAIモデルのファミリーであり、様々なタイプのコンテンツを理解し処理することに優れている。私たちのデータ抽出パイプラインにおいて、Geminiは3つの重要な機能を果たします: このAIを活用したアプローチは、特に以下のような使用例において、脆弱なCSSセレクタや壊れやすい正規表現に依存する従来の方法よりも大きな利点をもたらす: AIがデータ抽出プロセスにどのような変化をもたらしているかについては、Using AI for Web Scrapingをご覧ください。スクレイピングのワークフローにGeminiを実装するための実践的なチュートリアルをお探しの場合は、包括的なガイドをご覧ください:GeminiによるWebスクレイピングをご覧ください。 文の変形意味埋め込み文の生成 エンベッディングは、高次元空間におけるテキスト(または他のデータタイプ)の密なベクトル表現である。これらのベクトルは意味的な意味を捉え、コサイン類似度やユークリッド距離のようなメトリクスを用いて測定される、類似したテキスト片を近接したベクトルで表現することを可能にする。この特性は、セマンティック検索、クラスタリング、検索拡張生成(RAG)のようなアプリケーションで重要である。 Sentence Transformersライブラリは、高品質の文や段落の埋め込みを生成するための使いやすいインターフェースを提供する。Hugging Face Transformersの上に構築され、意味タスクのために微調整された幅広い事前学習済みモデルをサポートしています。 このエコシステムで最も人気があり、効果的なモデルの1つがオールMiniLM-L6-v2である: より大きなモデルはより微妙なエンベディングを提供するかもしれないが、all-MiniLM-L6-v2は性能、効率、コストの間で非常に優れたバランスを提供する。その384次元ベクトルは ほとんどの実用的なユースケース、特に初期段階の開発やリソースに制約のある環境では、このモデルで十分すぎる。エッジケースにおける精度のわずかな低下は、通常、スピードとスケーラビリティの大幅な向上によって相殺されます。そのため、AIアプリケーションの最初のイテレーションを構築する場合や、控えめなインフラストラクチャでパフォーマンスを最適化する場合は、all-MiniLM-L6-v2を使用することをお勧めします。 Pineconeベクトル埋め込み画像の保存と検索 テキストがベクトル埋め込みデータに変換されると、それを効率的に保存、管理、照会するための専用のデータベースが必要になります。従来のデータベースはこのために設計されていません。ベクトル・データベースは、埋め込みデータの高次元の性質を扱うために特別に設計されており、RAGパイプライン、セマンティック検索、パーソナライゼーション、その他のAI駆動型アプリケーションに不可欠なリアルタイムの類似性検索を可能にします。 Pineconeは、開発者フレンドリーなインターフェイス、低レイテンシの検索パフォーマンス、完全に管理されたインフラストラクチャで知られる人気のベクトルデータベースです。ベクトル検索インフラストラクチャの複雑さを抽象化することで、複雑なベクトルインデックスと検索を効率的に管理します。主なコンポーネントは以下の通りです: Pineconeは2つのデプロイメントアーキテクチャを提供する:ServerlessとPod-Based です。ほとんどのユースケース、特に開始時や動的な負荷に対処する場合は、シンプルさとコスト効率からサーバーレスが推奨されます。 セットアップと前提条件 パイプラインを構築する前に、以下のコンポーネントが適切に設定されていることを確認する。 前提条件 各APIキーの生成方法については、以下のツール固有の設定セクションを参照してください。 必要なライブラリのインストール このプロジェクトのコアとなるPythonライブラリをインストールする: これらのライブラリーは提供している: 環境変数の設定 プロジェクトのルート・ディレクトリに.envファイルを作成し、APIキーを追加する: ブライトデータ設定 Bright DataのWeb Unlockerを使用するには: 実装例と統合コードについては、Web Unlocker GitHub […]
6 分読
AI

LLMにおけるスーパーバイズド・ファインチューニングとは?

このPythonガイドでは、概念、ツール、ワークフロー、そしてAIプロジェクトを向上させる実践的な例を取り上げています。
7 分読