Loading Light/Dark Toggle
ブログに戻ります

Cheerioを使ったウェブスクレイピングの方法

Sophia Martinez
Sophia Martinez

Specialist in Anti-Bot Strategies

01-Nov-2024

ウェブスクレイピングは、競合価格の監視から大規模データセットの抽出まで、さまざまなアプリケーションで分析および使用するために、ウェブサイトから情報を収集することを可能にします。このガイドでは、Cheerio、HTML のスクレイピングと解析のための強力なツール、特に静的ページに適したツールに焦点を当てます。ここでは、Cheerio ベースのスクレーパーの設定方法、基本的な解析技術、そして実際の例を使用してその実践的なアプリケーションを紹介します。

Cheerio とは何ですか?

Cheerio は、htmlparser2 をベースにした強力で汎用性の高い Node.js ライブラリであり、サーバー側で DOM 要素の処理と操作のための jQuery スタイルの API を提供しています。これは、HTML 解析 とデータ抽出のための効率的なメソッドを提供するため、ウェブスクレイピングで人気のある選択肢となっています。そのシンプルで柔軟な API は、Cheerio を使いやすさと処理速度により、多くのプロジェクトのウェブスクレイピングタスクのための第一選択肢にします。

なぜウェブスクレイピングに Cheerio を選ぶのですか?

Cheerio は、特に静的 HTML コンテンツを扱う場合、Node.js でのウェブスクレイピングに広く好まれています。その軽量で高速な特性は、JavaScript のレンダリング が不要なシナリオに最適です。Puppeteer や Playwright などのブラウザベースのツールとは異なり、Cheerio は、ページ全体をロードすることなく HTML を直接解析するため、リソースを節約し、スクレイピングプロセスを高速化します。

Cheerio の大きな利点は、jQuery に似た構文であり、開発者は慣れた CSS スタイルのセレクターを使用して HTML 要素と対話できます。この使いやすさと効率性により、Cheerio は、単純なデータ抽出タスクのための第一選択ソリューションとなっています。

以下は、Cheerio と他の一般的なライブラリの比較です。

ライブラリ JavaScript 実行 リソース使用量 速度 ユースケース
Cheerio いいえ 低 速い 静的 HTML スクレイピング
Puppeteer はい 高 中程度 動的コンテンツのスクレイピング
Axios いいえ 低 速い 生の HTML の取得
Playwright はい 高 中程度 SPA サイトとの対話

静的データを効率的にスクレイピングすることに重点を置く開発者にとって、Cheerio は強力ながらもシンプルなツールです。特に、JavaScript のレンダリングのオーバーヘッドなしに、データを迅速に取得および解析する場合に役立ち、合理化された高速なソリューションを必要とするプロジェクトに最適です。

ウェブスクレイピングのための Cheerio の設定

Cheerio でスクレイピングを開始する前に、開発環境を設定する必要があります。このプロセスには、Node.js のインストールが含まれます。Node.js は、ウェブブラウザの外で JavaScript コードを実行できるようにする JavaScript ランタイムです。Node.js がインストールされると、Node Package Manager (npm) を使用して、Cheerio と Axios をインストールできます。Axios は、ウェブページへのリクエストを行うために人気のある HTTP クライアントです。

ステップ 1: Node.js のインストール

まだ Node.js をインストールしていない場合は、Node.js の公式ウェブサイト からダウンロードできます。お使いのオペレーティングシステムのインストール手順に従ってください。

ステップ 2: 新しいプロジェクトの作成

ターミナルまたはコマンドプロンプトを開き、プロジェクト用の新しいディレクトリを作成します。ディレクトリに移動し、次のコマンドを実行して新しい Node.js プロジェクトを初期化します。

bash Copy
mkdir cheerio-scraping
cd cheerio-scraping
npm init -y

このコマンドは、プロジェクトの依存関係を管理する package.json ファイルを作成します。

ステップ 3: Cheerio と Axios のインストール

プロジェクトが設定されたので、次のコマンドを実行して Cheerio と Axios をインストールできます。

bash Copy
npm install cheerio axios

このコマンドは、両方のライブラリをダウンロードしてインストールし、スクリプトで使用できるようにします。

ステップ 4: スクリプトの作成

次に、プロジェクトディレクトリに新しい JavaScript ファイルを作成します。scrape.js という名前を付けることができます。このファイルには、ウェブスクレイピングコードが含まれます。

Cheerio ウェブスクレイピングスクリプトの基本的な構造

Cheerio と Axios がインストールされたので、これらのライブラリを使用したウェブスクレイピングスクリプトの基本的な構造を見てみましょう。以下は、サンプルの電子商取引ウェブサイトから製品データをスクレイピングする方法を示すサンプルコードスニペットです。

例のスクリプト

javascript Copy
const axios = require('axios');
const cheerio = require('cheerio');

// スクラップしたいウェブサイトの URL
const url = 'https://example.com/products';

// HTML コンテンツを取得するための関数
async function fetchHTML(url) {
    try {
        const { data } = await axios.get(url);
        return data;
    } catch (error) {
        console.error(`URL を取得できませんでした: ${error}`);
    }
}

// 製品データをスクレイピングするための関数
async function scrapeProductData() {
    const html = await fetchHTML(url);
    const $ = cheerio.load(html);
    
    // スクラップされたデータを格納する配列
    const products = [];

    // 要素を選択し、データを抽出します
    $('.product-item').each((index, element) => {
        const productName = $(element).find('.product-name').text().trim();
        const productPrice = $(element).find('.product-price').text().trim();

        products.push({
            name: productName,
            price: productPrice
        });
    });

    console.log(products);
}

// スクラッピング関数を呼び出します
scrapeProductData();

コードの説明

  1. インポート: スクリプトは、HTTP リクエスト用の Axios と HTML 解析用の Cheerio の必要なライブラリをインポートすることから始まります。

  2. fetchHTML 関数: この非同期関数は、URL を引数として受け取り、その URL に GET リクエストを行い、HTML コンテンツを返します。リクエスト中にエラーが発生した場合、エラーメッセージをコンソールに出力します。

  3. scrapeProductData 関数: この関数は、最初に fetchHTML を使用して HTML コンテンツを取得します。次に、cheerio.load() を使用して HTML を Cheerio にロードします。

  4. データ抽出: クラス .product-item を持つ要素を選択し、各要素を反復処理します。各製品について、製品名と価格を抽出し、空白をトリムし、結果を配列にプッシュします。

  5. 出力: 最後に、製品データの配列をコンソールに出力します。

Cheerio を使用した HTML の解析: 核心的な技術

Cheerio を使用すると、HTML の解析は簡単です。さまざまな種類のデータを抽出する方法を次に示します。

要素からテキストを抽出する

.text() を使用して、HTML タグからテキストコンテンツを抽出します。たとえば、すべての段落を取得するには、次のようになります。

javascript Copy
$('p').each((index, element) => {
    console.log(`段落 ${index + 1}:`, $(element).text());
});

属性値を抽出する

画像やリンクをスクレイピングするには、attr() メソッドが必要です。

javascript Copy
$('img').each((index, element) => {
    const imgSrc = $(element).attr('src');
    console.log(`画像 ${index + 1}:`, imgSrc);
});

DOM のトラバーサル

Cheerio は、DOM ナビゲーションのために .parent()、.children()、.find() などのメソッドもサポートしています。これは、データがネストされている場合に役立ちます。

javascript Copy
$('.article').children('h2').each((index, element) => {
    console.log('見出し:', $(element).text());
});

例: ブログからのニュースの見出しのスクレイピング

人気のあるテクノロジーブログから最近の投稿の見出しをスクレイピングすることで、実用的な例を見てみましょう。https://example-blog.com からすべての投稿の見出しを抽出したいとします。

手順:

  1. ブログの HTML 構造を調べて、投稿の見出しを含む HTML タグを特定します(例: <h2 class="post-title">)。
  2. Cheerio を使用してこれらの要素を選択し、取得します。

サンプルコード:

javascript Copy
const axios = require('axios');
const cheerio = require('cheerio');

async function scrapeBlogTitles() {
    try {
        const { data } = await axios.get('https://example-blog.com');
        const $ = cheerio.load(data);

        // すべての投稿の見出しを選択します
        $('h2.post-title').each((index, element) => {
            const title = $(element).text();
            console.log(`投稿 ${index + 1}:`, title);
        });

    } catch (error) {
        console.error('ブログの見出しを取得中にエラーが発生しました:', error);
    }
}

scrapeBlogTitles();

この例では:

  • axios.get() は、ブログの HTML コンテンツを取得します。
  • cheerio.load(data) は、コンテンツを Cheerio にロードします。
  • $('h2.post-title') は、タグとクラスに基づいてすべての見出しを選択します。
  • $(element).text() は、各見出しを抽出してログに出力します。

Cheerio を使用した一般的な課題の対処

Cheerio を使用した一般的な課題に関する改訂されたセクションを以下に示します。ここでは、2 つの実際のウェブサイトのみを例として示し、ハイパーリンクを含みます。

Cheerio を使用した一般的な課題

Cheerio は、ウェブスクレイピングのための強力で汎用性の高いツールですが、課題がないわけではありません。ユーザーは、データ抽出プロセスを複雑にする可能性のあるいくつかの障害に直面することがよくあります。

最も重要な課題の 1 つは、動的コンテンツの処理 です。多くの現代のウェブサイトは JavaScript フレームワークを使用しているため、最初に配信された HTML には、必要なすべての情報が含まれていない場合があります。たとえば、Amazon のような人気のある電子商取引ウェブサイトをスクレイピングする場合、最初の HTML には基本的なレイアウト要素のみが含まれている可能性があり、製品の詳細、レビュー、価格は非同期的にロードされます。Cheerio スクリプトがすべての JavaScript が実行される前に実行されると、不完全なデータが取得される可能性があります。

もう 1 つの課題は、レート制限と IP ブロック です。ウェブサイトは、受信トラフィックを監視し、特定のしきい値を超えたリクエストをブロックまたは制限することがよくあります。たとえば、eBay のようなサイトでは、1 つの IP アドレスから 1 分間に許可されるリクエスト数が制限されている可能性があります。スクレイピングスクリプトがリクエストを速すぎるペースで送信すると、HTTP 403 Forbidden レスポンスを受け取り、データ抽出が効果的に停止される可能性があります。これを克服するには、スクリプトにスロットリングを実装し、リクエスト間に遅延を追加するか、ローテティングプロキシ を使用して負荷を分散することを検討してください。

これらの一般的な課題を理解し、事前に対処することで、Cheerio を使用したウェブスクレイピングプロジェクトを強化し、より効率的で成功したデータ抽出プロセスを実現できます。

ウェブスクレイピングの課題やプロジェクトでの継続的なブロックに苦労していますか?

Scrapeless を使用して、データ抽出を簡単かつ効率的に行うことができます。すべてを 1 つの強力なツールで。

無料 で今すぐお試しください!

エラー処理

ネットワークの問題や予期しないページの変更により、エラーが発生する可能性があります。これらのエラーを適切に処理するために、try-catch ブロックを使用します。

javascript Copy
try {
    // スクラッピングコードをここに記述します
} catch (error) {
    console.error('データのスクレイピング中にエラーが発生しました:', error);
}

8. ウェブスクレイピングでの Cheerio の使用方法に関するベストプラクティス

Cheerio を使用して、効率的かつ準拠したウェブスクレイピングを行うには、次の点に注意してください。

  • 特定の要素をターゲットとする: 解析時間を短縮するために、正確なセレクターを使用します。
  • エッジケースを処理する: HTML 構造の変更に備えてください。
  • ウェブサイトのポリシーを尊重する: 許可されている場合にのみスクレイピングを行い、使用ポリシーを尊重します。
  • リクエストを最適化する: リクエストヘッダーとセッション管理を使用して、検出のリスクを軽減します。

まとめ

Cheerio は、HTML を解析し、静的なウェブページをスクレイピングするための強力なツールです。その柔軟性、効率性、そして学習しやすい構文は、さまざまなスクレイピングタスクに最適です。ベストプラクティスに従い、倫理的および技術的なガイドラインを考慮することで、Cheerio を活用して、ウェブサイトから有意義なデータを効果的に収集できます。

調査、SEO 分析、競合分析など、Cheerio は幅広いウェブスクレイピングのニーズに対応できます。責任を持ってスクレイピングを行い、スクリプトが HTML 構造の動的な変更を処理できるようにしておくことを忘れないでください。

Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。

最も人気のある記事

カタログ