CAPSOLVER
ブログ
Webスクレイピングにnode-fetchを使う方法

Webスクレイピングにnode-fetchを使用する方法

Logo of CapSolver

Nikolai Smirnov

Software Development Lead

27-Sep-2024

node-fetch とは?

node-fetch は、Node.js に window.fetch API を提供する軽量な JavaScript ライブラリです。Node.js 環境からの HTTP リクエストを行うために頻繁に使用され、ネットワーク操作を非同期的に処理するためのモダンで柔軟な方法を提供します。

機能:

  • Promise ベース: JavaScript Promise を使用して、非同期操作を簡単に管理します。
  • Node.js サポート: Node.js 環境向けに特別に設計されています。
  • ストリーム サポート: ストリームをサポートしており、大量のデータを処理するのに適しています。
  • 小さく効率的: 最小限のデザインで、パフォーマンスと最新の JavaScript 機能との互換性に重点を置いています。

前提条件

node-fetch を使用する前に、次のものがあることを確認してください。

  • Node.js をインストールする必要があります。
  • パッケージを管理するための npm または yarn をインストールする必要があります。

インストール

node-fetch を使用するには、npm または yarn を使用してインストールする必要があります。

bash Copy
npm install node-fetch

または

bash Copy
yarn add node-fetch

基本的な例: GET リクエストの実行

以下は、node-fetch を使用して単純な GET リクエストを実行する方法です。

javascript Copy
const fetch = require('node-fetch');

fetch('https://httpbin.org/get')
  .then(response => response.json())
  .then(data => {
    console.log('Response Body:', data);
  })
  .catch(error => {
    console.error('Error:', error);
  });

ウェブスクレイピングの例: API から JSON データを取得する

API からデータを取得し、結果をログに記録してみましょう。

javascript Copy
const fetch = require('node-fetch');

fetch('https://jsonplaceholder.typicode.com/posts')
  .then(response => response.json())
  .then(posts => {
    posts.forEach(post => {
      console.log(`${post.title} — ${post.body}`);
    });
  })
  .catch(error => {
    console.error('Error:', error);
  });

CapSolver と node-fetch を使用して CAPTCHA を処理する

このセクションでは、CapSolvernode-fetch と統合して CAPTCHA を処理します。CapSolver は、ReCaptcha V3 や captcha などの CAPTCHA を解決するための API を提供し、そのような CAPTCHA を解決する必要があるタスクの自動化を可能にします。

例: CapSolver と node-fetch を使用して ReCaptcha V3 を解決する

最初に、node-fetch と CapSolver をインストールします。

bash Copy
npm install node-fetch
npm install capsolver

次に、ReCaptcha V3 を解決し、解決策をリクエストで使用する方法を説明します。

javascript Copy
const fetch = require('node-fetch');
const CAPSOLVER_KEY = 'YourKey';
const PAGE_URL = 'https://antcpt.com/score_detector';
const PAGE_KEY = '6LcR_okUAAAAAPYrPe-HK_0RULO1aZM15ENyM-Mf';
const PAGE_ACTION = 'homepage';

async function createTask(url, key, pageAction) {
  try {
    const apiUrl = 'https://api.capsolver.com/createTask';
    const payload = {
      clientKey: CAPSOLVER_KEY,
      task: {
        type: 'ReCaptchaV3TaskProxyLess',
        websiteURL: url,
        websiteKey: key,
        pageAction: pageAction
      }
    };
    
    const response = await fetch(apiUrl, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(payload)
    });
    
    const data = await response.json();
    return data.taskId;

  } catch (error) {
    console.error('Error creating CAPTCHA task:', error);
    throw error;
  }
}

async function getTaskResult(taskId) {
  try {
    const apiUrl = 'https://api.capsolver.com/getTaskResult';
    const payload = {
      clientKey: CAPSOLVER_KEY,
      taskId: taskId,
    };

    let result;
    do {
      const response = await fetch(apiUrl, {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(payload)
      });

      result = await response.json();
      if (result.status === 'ready') {
        return result.solution;
      }

      await new Promise(resolve => setTimeout(resolve, 5000)); // wait 5 seconds
    } while (true);

  } catch (error) {
    console.error('Error fetching CAPTCHA result:', error);
    throw error;
  }
}

async function main() {
  console.log('Creating CAPTCHA task...');
  const taskId = await createTask(PAGE_URL, PAGE_KEY, PAGE_ACTION);
  console.log(`Task ID: ${taskId}`);

  console.log('Retrieving CAPTCHA result...');
  const solution = await getTaskResult(taskId);
  const token = solution.gRecaptchaResponse;
  console.log(`Token Solution: ${token}`);

  const res = await fetch('https://antcpt.com/score_detector/verify.php', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ 'g-recaptcha-response': token })
  });

  const response = await res.json();
  console.log(`Score: ${response.score}`);
}

main().catch(err => {
  console.error(err);
});

node-fetch を使用してプロキシを処理する

node-fetch を使用してプロキシを介してリクエストをルーティングするには、https-proxy-agent などのプロキシエージェントが必要です。実装方法は次のとおりです。

bash Copy
npm install https-proxy-agent

プロキシを使用した例:

javascript Copy
const fetch = require('node-fetch');
const HttpsProxyAgent = require('https-proxy-agent');

const proxyAgent = new HttpsProxyAgent('http://username:password@proxyserver:8080');

fetch('https://httpbin.org/ip', { agent: proxyAgent })
  .then(response => response.json())
  .then(data => {
    console.log('Response Body:', data);
  })
  .catch(error => {
    console.error('Error:', error);
  });

node-fetch で Cookie を処理するには、fetch-cookie のようなライブラリを使用できます。使用方法を説明します。

bash Copy
npm install fetch-cookie

例:

javascript Copy
const fetch = require('node-fetch');
const fetchCookie = require('fetch-cookie');
const cookieFetch = fetchCookie(fetch);

cookieFetch('https://httpbin.org/cookies/set?name=value')
  .then(response => response.json())
  .then(data => {
    console.log('Cookies:', data);
  })
  .catch(error => {
    console.error('Error:', error);
  });

詳細な使い方: カスタムヘッダーと POST リクエスト

node-fetch を使用して、ヘッダーをカスタマイズしたり、POST リクエストを実行したりできます。

javascript Copy
const fetch = require('node-fetch');

const headers = {
  'User-Agent': 'Mozilla/5.0 (compatible)',
  'Accept-Language': 'en-US,en;q=0.5',
};

const data = {
  username: 'testuser',
  password: 'testpass',
};

fetch('https://httpbin.org/post', {
  method: 'POST',
  headers: headers,
  body: JSON.stringify(data),
})
  .then(response => response.json())
  .then(data => {
    console.log('Response JSON:', data);
  })
  .catch(error => {
    console.error('Error:', error);
  });

ボーナスコード

CapSolver: scrape で、最高の CAPTCHA ソリューションのボーナスコード を入手してください。コードを適用すると、チャージごとに 5% のボーナスが追加されます。

まとめ

node-fetch を使用すれば、Node.js で HTTP リクエストを効果的に管理できます。CapSolver と統合することで、ReCaptcha V3 や captcha などの CAPTCHA を解決し、制限されたコンテンツにアクセスできます。さらに、node-fetch はヘッダー、プロキシサポート、Cookie 管理を通じてカスタマイズが可能で、ウェブスクレイピングと自動化のための汎用性の高いツールとなっています。

コンプライアンス免責事項: このブログで提供される情報は、情報提供のみを目的としています。CapSolverは、すべての適用される法律および規制の遵守に努めています。CapSolverネットワークの不法、詐欺、または悪用の目的での使用は厳格に禁止され、調査されます。私たちのキャプチャ解決ソリューションは、公共データのクローリング中にキャプチャの問題を解決する際に100%のコンプライアンスを確保しながら、ユーザーエクスペリエンスを向上させます。私たちは、サービスの責任ある使用を奨励します。詳細については、サービス利用規約およびプライバシーポリシーをご覧ください。

もっと見る

AIによる画像認識:基礎と解決策
AIによる画像認識:基礎と解決策

画像CAPTCHAの苦労とはもうお別れ!CapSolver Vision Engineが、高速・スマート・そして手間いらずで解決します!

Logo of CapSolver

Sora Fujimoto

25-Apr-2025

Webスクレイピングに最適なユーザーエージェントと使用方法
Webスクレイピングに最適なユーザーエージェントと使用方法

ウェブスクレイピングにおける最良のユーザーエージェントガイドと、検知回避のための効果的な使用方法。ユーザーエージェントの重要性、種類、シームレスで検知されないウェブスクレイピングのための使用方法を解説します。

Logo of CapSolver

Sora Fujimoto

07-Mar-2025

Webスクレイピングと自動化のためのCloudflare JSチャレンジの解決方法
Webスクレイピングと自動化のためのCloudflare JSチャレンジの解決方法

CloudflareのJavaScriptチャレンジを解決し、シームレスなウェブスクレイピングと自動化を実現する方法を学びましょう。ヘッドレスブラウザ、プロキシローテーション、そしてCapSolverの先進的なCAPTCHA解決機能の活用など、効果的な戦略を発見してください。

Cloudflare
Logo of CapSolver

Sora Fujimoto

05-Mar-2025

Cloudflare TLSフィンガープリンティング:その仕組みと解決策
Cloudflare TLSフィンガープリンティング:概要と解決策

CloudflareのTLSフィンガープリンティングによるセキュリティへの活用、ボットの検出とブロック方法、ならびにWebスクレイピングや自動ブラウジングタスクにおける解決策を学びましょう。

Cloudflare
Logo of CapSolver

Sora Fujimoto

28-Feb-2025

なぜ私は何度もロボットでないことを確認するよう求められるのですか?
なぜ私は何度もロボットでないことの確認を求められるのですか?

Googleがロボットではないことを確認するよう促す理由を学び、CapSolverのAPIを使用してCAPTCHAチャレンジを効率的に解決するなどのソリューションを探ります。

Logo of CapSolver

Sora Fujimoto

25-Feb-2025

Cloudflareで保護されたウェブサイトからデータを取得する方法
Cloudflare保護ウェブサイトからのデータ抽出方法

このガイドでは、Cloudflareで保護されたウェブサイトからデータを抽出するための倫理的で効果的な手法を探ります。

Cloudflare
Logo of CapSolver

Sora Fujimoto

20-Feb-2025