Node.js は、サーバーサイドアプリケーションとネットワークアプリケーションを作成できる良く知られたJavaScriptのランタイム環境です。たとえば、Node.jsでリモートAPIやWebサイトからデータを取得したい場合、アプリケーションとインターネット間の仲介役として機能するWebプロキシサーバーを使用できます。これにより、ネットワーク制限の回避、地域制限のあるコンテンツへのアクセス、そしてIPアドレスの隠蔽が可能になります。
最新のJavaScriptアプリケーションのほとんどが、 Fetch API を使用してHTTPリクエストを実行します。Webブラウザでは組み込み機能として利用でき、Node.js v16以降では外部依存関係なしで利用できるようになっています。ただし、注意点があります。Node.jsの組み込みフェッチ機能は、Webブラウザで利用可能な機能を反映しており、プロキシでは動作しません。
幸いなことに、簡単な解決策があります。 node-fetch
ライブラリがそれです。このライブラリには、 Node.js HTTPエージェントと連携する機能を始めとする、Node.js固有の追加機能を加えるNode.js専用のFetch APIが含まれています。HTTPエージェントはコネクションプーリングを管理するツールで、これにより複数のHTTPリクエストでコネクションを再利用できます。つまり、HTTPエージェントを使用して、フェッチリクエストがプロキシを経由するように設定できるというわけです。
この記事では、 node-fetch
と https-proxy-agent
ライブラリ を使用して、HTTPプロキシおよびHTTPSプロキシの両方をサポートするHTTPエージェントを作成する方法を説明します。また、Webスクレイピングの異なるニーズに応じたさまざまなプロキシタイプと機能を提供する Bright Data のプロキシサービスも紹介します。
node-fetchでプロキシを使用する方法
このチュートリアルを始める前に、次の前提条件が満たされているかを確認してください。
- Node.jsが正常にインストールされている。
- Webプロキシにアクセスできる。テスト目的であれば、Node.jsを使用して独自のWebプロキシを設定することも可能です。
前提条件をすべて満たしたら、準備完了です!
Node.jsプロジェクトの作成
最初に行うのは、Node.jsプロジェクトを作成して npmで初期化することです。これを行うには、ターミナルを開いて次のコマンドを実行します。
mkdir node-fetch-proxy
cd node-fetch-proxy
npm init -y
このコマンドは node-fetch-proxy
というフォルダーを作成して、このフォルダーに移動したあと、いくつかのデフォルト値を含む package.json
ファイルを作成します。
node-fetchとhttps-proxy-agentのインストール
ここで以下のコマンドを使用して、 node-fetch
および https-proxy-agent
ライブラリをプロジェクトの依存関係としてインストールします。
npm install –-save node-fetch https-proxy-agent
このコマンドは、ライブラリをプロジェクトの node_modules
フォルダーにインストールし、それに応じて package.json
ファイルを更新します。
HttpsSProxyAgentとnode-fetchを使用してプロキシ経由でHTTPコールを行う
node-fetch
および https-proxy-agent
ライブラリをインストールしたら、 https-proxy-agent
ライブラリの HttpsProxyAgent
クラスを、 node-fetch
ライブラリから取得した フェッチ
関数と一緒に使用して、プロキシ経由でHTTPコールを行います。これを実行するには、プロジェクトフォルダーに proxy.mjs
というファイルを作成し、次のコードを追加します。
import fetch from 'node-fetch';
import { HttpsProxyAgent } from 'https-proxy-agent';
// Replace <proxy_url> with your actual proxy URL
const agent = new HttpsProxyAgent('<proxy_url>');
// Use fetch with the agent option to make an HTTP request through the proxy
// Replace <target_url> with the URL you want to request
fetch('<target_url>', { agent })
.then((response) => response.text())
.then((text) => console.log(text))
.catch((error) => console.error(error));
このコードは次のアクションを完了します。
-
フェッチ
関数をnode-fetch
ライブラリからインポートします。これでブラウザ対応のNode.js用Fetch APIが提供されます。 -
HttpsProxyAgent
クラスをhttps-proxy-agent
ライブラリからインポートします。これでHTTPSプロキシをサポートするHTTPエージェントが作成されます。 - お客様のプロキシURLで
HttpsProxyAgent
インスタンスを作成します。{
を実際のプロキシURLに置き換える必要があります。このURLは次のフォーマットになります。3} http://username:password@host:port
-
フェッチ
関数とエージェントオプションを使用して、プロキシ経由でHTTPリクエストを行います。{
をリクエストしたいURLに置き換える必要があります。このURLは、有効なHTTPまたはHTTPSのURLであればどんなものでも構いません。3} - 応答を処理し、発生したあらゆるエラーをプリントアウトします。
コードを保存して次のコマンドを実行します。
node proxy.mjs
このコマンドはコードを実行し、プロキシ経由でHTTPリクエストを行います。ターミナルに応答テキストやエラーが表示されます。
node-fetchでプロキシを使用する際の制限
この方法は単純なプロキシを使用する場合にはうまく機能しますが、Webスクレイピングなどの実際のユースケースの多くで、より高度なアプローチが必要になってきます。WebサイトやWeb APIの多くが、よく知られたプロキシのIPアドレスをブロックするため、必要なデータの収集が困難になります。
さらに、閲覧者の所在地によってコンテンツを見えなくする地理的な制限をかけているサイトも存在します。たとえば、米国の新聞社の中には、 EUの一般データ保護規則 (GDPR) および ePrivacy指令の遵守が困難なため、自社Webサイトへの欧州在住者の閲覧アクセスをブロックしている企業があります。
幸いなことに、 Bright Dataのプロキシサービスが提供するより高度なプロキシには、ユーザーがこれらの制限を回避するのに役立つ多様なプロキシが用意されています。
Bright Dataのプロキシサービス
信頼性が高くスケーラブルなWebスクレイピング用プロキシサービスをお探しの方に朗報です。 Bright Data はプロキシソリューションの大手プロバイダーで、195か国で7200万を超えるIPアドレスを提供し、99.9パーセントの稼働率を実現しています。
Bright Dataのプロキシサーバーは、ユースケースと予算に応じて、レジデンシャル、データセンター、インターネットサービスプロバイダー(ISP)、モバイル、スーパープロキシなどの異なるタイプのプロキシから選択できます。既知のプロキシIPアドレスをブロックしているサイトからコンテンツを取得するWebスクレイパーを作成する際に、このような選択肢が役立ちます。
制御できない場所で実行されている汎用プロキシに頼らずに、Bright Dataプロキシを使用すると、自分がスクレイピングしたいコンテンツによくアクセスするユーザータイプと一致するプロキシを選択できます。また、ジオターゲティング、IPローテーション、セッション制御などの高度な機能にアクセスして、アプリケーションのブロックを確実に回避することも可能です。
Bright Dataのプロキシタイプ
Bright Dataは、さまざまなWebスクレイピング用途向けに多様なプロキシタイプを提供しています。提供しているプロキシの一部を以下で紹介します。
- レジデンシャルプロキシ は、パーソナルコンピュータやラップトップなど、住宅用ISPを経由してWebにリンクされている正規デバイスを介してインターネットクエリを処理します。このプロキシは一般ユーザーに溶け込み、プロキシされたリクエストがブロックされる可能性が低くなるため、Webスクレイピングアクティビティに優れています。
- プロキシサーバー がゲートウェイとして機能し、Bright Dataのレジデンシャルプロキシの大規模ネットワークへのアクセスを許可します。単一のスーパープロキシURLを使用すると、IPアドレスを指定せずに任意のレジデンシャルプロキシに接続できます。さらに、スーパープロキシは、希望のレジデンシャルプロキシの国、都市、ISP、ASNを選択するなど、さまざまな設定を柔軟に微調整できます。
- データセンタープロキシ は、データセンター施設内にあるサーバーに割り当てられたIPアドレスを使用します。データセンタープロキシは、WebサイトやAPIによって検出され、その後ブロックされる傾向がありますが、プロキシリクエストのブロックを試みないURLからデータにアクセスするアプリでは依然として実用的です。これは、住宅、企業、モバイルのIPアドレスから送信する必要のないスクレイピングトラフィックでのWebスクレイピングプロジェクトに最適です。
- ISPプロキシ は、ISPがホストするサーバーに割り当てられたIPアドレスです。ISPプロキシはレジデンシャルプロキシと似ていますが、ここでのIPアドレスが住宅用IPでも企業用IPでもよい点が異なります。そのため、住宅用と企業用のトラフィックが混在すると予想されるサイトでスクレイピングする場合に適しています。
- モバイルプロキシ は、携帯電話ネットワーク経由でインターネットに接続するモバイルハードウェア (すなわち スマートフォンやタブレット) に紐づけられたIPアドレスです。Bright Dataのモバイルプロキシは事実上検出されることはなく、本物のモバイルユーザーのアクティビティを効果的にシミュレートします。モバイル以外のIPアドレスでのデータアクセスをブロックされずに、モバイル用WebサイトやAPIによって提供されるコンテンツを確実にスクレイピングする際に特に有効です。
プロキシマネージャーとAPI
選択肢が非常に多いため、プロキシの使用管理が複雑になる可能性があります。幸いなことに、 Bright Dataのプロキシマネージャー を使用すると、プロキシの設定と管理、使用状況とパフォーマンスの監視、問題のトラブルシューティングが簡単に行えます。
さらに、Bright Data APIとインテグレーションを使用して、コードとプロキシの統合をシームレスに実行できます。 スクレイピングブラウザAPI を使用すると、使い慣れたツール (すなわち Playwright と Puppeteer) のプロキシを簡単に使用できます。また、 Webアンロッカー は、通常スクレイパーのサイトへのアクセスを妨害するブロッキングを克服するのに役立ちます。
まとめ
この記事では、 node-fetch
ライブラリと https-proxy-agent
ライブラリを使用して、HTTPSプロキシをサポートするHTTPエージェントを作成する方法を説明しました。また、Webスクレイピングの異なるニーズに応じたさまざまなプロキシタイプと機能を提供するBright Dataプロキシサービスも紹介しました。
Node.jsのフェッチリクエストにWebプロキシを使用すると、ネットワーク制限の克服、地域制限のあるコンテンツへのアクセス、IPアドレスの隠蔽に役立ちます。ただし、 node-fetch
と https-proxy-agent
を使用した単純なプロキシは、一部のWebスクレイピング用途、特に匿名性、地域ターゲティング、IPローテーション、その他の高度な機能が必要な用途には十分ではない可能性があります。このような場合は、Bright Dataプロキシのご利用を検討してみてください。
Bright Dataのプロキシサービスは、ブロックや制限に邪魔されずに、あらゆるWebサイト、APIへのアクセスをサポートする幅広い機能を提供しています。また、ユースケースや予算に応じて、異なるタイプのプロキシから選択できます。Bright Dataのプロキシサービスを利用したい方は、今すぐ 無料トライアルにサインアップ しましょう。
クレジットカードは必要ありません