JavaScriptウェブスクレイパーの作り方:ステップバイステップガイド

最終更新日:May 6, 2026

ウェブにはデータがあふれています。ビジネスに携わる方でも、テックに関わる方でも、あるいは少し好奇心があるだけの方でも、「ウェブサイトから情報をまとめて取れたらいいのに」「午後いっぱいコピー&ペーストに追われなくて済んだらいいのに」と思ったことがあるのではないでしょうか。しかも2025年には、インターネット通信量のほぼ半分が、データを求めてウェブを巡回・スクレイピングするボットによるものになり、デジタル企業の70%超が市場インテリジェンスや業務のために公開ウェブデータを活用しています()。とはいえ、ウェブデータの需要が急増する一方で、実際にそれを抽出する作業は、特に今日のような動的で JavaScript 駆動のサイトでは、なかなか手間がかかります。

そこで登場するのが JavaScript です。ウェブの言語である JavaScript は、古いスクレイパーが苦手とする動的でインタラクティブなページの扱いにとても向いています。研究の自動化をしたい開発者でも、リードリストを作りたい営業担当でも、あるいは単に試してみるのが好きな人でも、このガイドでは JavaScript ウェブスクレイパーを作るための基本から高度な手法まで、さらに のような AI ツールでコードなしに済ませる方法まで、必要なポイントを順番に解説します。

JavaScript スクレイパーの基本:JavaScript を使ったウェブスクレイピングとは?

まずは基本から見ていきましょう。ウェブスクレイピングとは、ウェブサイトから情報を自動で抽出することです。何百ものページをすばやく巡回して、必要なデータをコピーし、きれいなスプレッドシートにまとめてくれる、優秀なアシスタントがいるようなものです。しかも、手首の痛みを訴えることはありません。

JavaScript スクレイパーは、その名のとおり JavaScript で作られたウェブスクレイパーです。JavaScript スクレイパーの実行方法は、大きく2つあります。

  • ブラウザ内: ブラウザのコンソールでスクリプトを直接動かす、またはブラウザ拡張機能を使って、今見ているページからデータを取得する方法。
  • サーバーサイド(Node.js): Node.js を使ってブラウザの外で JavaScript を動かし、ウェブページを取得して内容を解析し、プログラムでデータを抽出する方法。

では、なぜこれがビジネスユーザーにとって重要なのでしょうか。ウェブスクレイピングは、リード獲得(名簿サイトから連絡先を集める)、価格監視(競合価格を追う)、市場調査(レビュー、ニュース、トレンドを集める)など、さまざまな場面で役立ちます。実際、ウェブスクレイピング利用者の48%は e コマース業界に集中しています()。ブラウザで見えているものなら、JavaScript スクレイパーでたいてい取得できます。

なぜ JavaScript でウェブスクレイピングするのか?現代のサイトで活きる主な利点

js-web-scraping-overview.png では、データサイエンスでは Python が注目されがちなのに、なぜスクレイピングに JavaScript を使うのでしょうか。答えはシンプルです。現代のウェブサイトは JavaScript で動いているからです。ページ読み込み後にコンテンツを動的に読み込んだり、「もっと見る」をクリックしたり、スクロールしたりといった操作を必要とするサイトが増えています。JavaScript スクレイパーなら、次のようなことができます。

  • 動的コンテンツへの対応: JavaScript はブラウザで実行される言語なので、スクリプト実行後に初めて表示されるコンテンツも見て、操作できます。
  • 実ユーザーの挙動を再現: Puppeteer のようなツールを使えば、人間と同じようにクリック、スクロール、ログインまで自動化できます。
  • DOM をネイティブに扱える: JavaScript はページの構造に直接アクセスして操作できるため、必要なデータだけを取り出しやすくなります。

他の言語と比べるとどうでしょうか。簡単に比較してみましょう。

要素JavaScript(Node.js)PythonPHP
動的コンテンツ非常に強い——ブラウザ上でネイティブに動き、JavaScript が多いサイトに最適動的コンテンツには追加ツール(Selenium/Playwright)が必要限定的
速度/並列処理高い——非同期モデルで、多数のページを並列取得できる良いが、並列処理には asyncio/Scrapy が必要遅め、一般的ではない
使いやすさ中程度——Web 開発者にはなじみやすいが、非同期処理は初心者につまずきやすい初心者向けで学びやすく、チュートリアルも豊富基本的、柔軟性は低い
ブラウザ自動化第一級(Puppeteer、Playwright)良い(Selenium、Playwright)まれ
最適な用途動的・インタラクティブなサイト、SPA、Web 開発ワークフローデータ分析、静的サイト、短いスクリプトシンプルな静的サイト

対象サイトが シングルページアプリ だったり、スクロールやクリックでデータを読み込むタイプなら、JavaScript が最適な選択肢になることが多いです()。

最初の JavaScript スクレイパーを準備する:ツールと環境

さっそく手を動かしてみましょう。ここでは、基本的な JavaScript スクレイピング環境のセットアップ方法を紹介します。フレームワークは不要です。

  1. Node.js をインストールする
    から Node.js をダウンロードしてインストールします。これでブラウザの外でも JavaScript を実行できます。

  2. プロジェクトを初期化する
    ターミナルを開いて、次を実行します。

    1mkdir my-scraper
    2cd my-scraper
    3npm init -y
  3. 必須ライブラリをインストールする
    次のものがあると便利です。

    • HTTP リクエスト用に または node-fetch
    • HTML 解析用に (サーバー版の jQuery のようなものです)
    1npm install axios cheerio
  4. 対象サイトを確認する
    Chrome DevTools を開き(右クリック > 検証)、データが入っている HTML 要素を探します。クラス名、ID、タグをメモしておきましょう。

以下は、シンプルなスタータースクリプトです。

1const axios = require('axios');
2const cheerio = require('cheerio');
3async function scrapePage(url) {
4  try {
5    const { data: html } = await axios.get(url);
6    const $ = cheerio.load(html);
7    const pageTitle = $('head > title').text();
8    console.log("ページタイトル:", pageTitle);
9  } catch (err) {
10    console.error("スクレイピングに失敗しました:", err);
11  }
12}
13scrapePage('https://example.com');

node scrape.js で実行すると、ページタイトルが表示されます。数行のコードでここまでできるなら、かなり悪くありません。

基本的な JavaScript ウェブスクレイパーを作る:ステップごとの解説

次は、もう少し実用的なものを作ってみましょう。たとえば、定番の練習用サイト から書籍タイトルと価格を取得したいとします。

ステップ 1:ページを確認する

各書籍は <article class="product_pod"> の中にあります。タイトルは <h3><a title="Book Title"></a></h3>、価格は <p class="price_color"> にあります。

ステップ 2:スクレイパーを書く

1const axios = require('axios');
2const cheerio = require('cheerio');
3async function scrapeBooks() {
4  const url = 'http://books.toscrape.com/';
5  const { data: html } = await axios.get(url);
6  const $ = cheerio.load(html);
7  const books = [];
8  $('article.product_pod').each((i, elem) => {
9    const title = $(elem).find('h3 a').attr('title');
10    const price = $(elem).find('.price_color').text();
11    books.push({ title, price });
12  });
13  console.log(books);
14}
15scrapeBooks();

このスクリプトはページを取得し、HTML を解析し、各書籍を順番に見て、タイトルと価格を抽出します。出力はどうなるかというと、書籍オブジェクトが整った配列です。

1[
2  { "title": "A Light in the Attic", "price": "£51.77" },
3  { "title": "Tipping the Velvet", "price": "£53.74" }
4]

ステップ 3:ページネーションに対応する

複数ページを取得したい場合は、「次へ」リンクを探してページを順番に回し、毎回 URL を更新していきます。少しコードを足すだけで、サイト全体を取得できます。

さらに進める:JavaScript で動的コンテンツとユーザー操作に対応する

ここからが面白いところでもあり、時に厄介なところでもある、動的コンテンツです。最近の多くのサイトでは、初期 HTML にすべてのデータが含まれていません。ページ読み込み後に JavaScript で読み込んだり、ボタンをクリックしたりスクロールしたりしないと、続きが見えないことがあります。

Cheerio と Axios ではこのコンテンツは見えません。取得できるのは生の HTML だけです。動的サイトをスクレイピングするには、 のような ヘッドレスブラウザ が必要です。

高度な JavaScript ウェブクロールに Puppeteer を使う

Puppeteer を使うと、コードで Chrome(または Chromium)を操作できます。できることは次のとおりです。

  • ページを開く
  • 要素の読み込みを待つ
  • ボタンをクリックする、フォームを埋める、スクロールする
  • すべてのスクリプト実行後にコンテンツを抽出する

以下は、シンプルな Puppeteer スクリプトです。

1const puppeteer = require('puppeteer');
2(async () => {
3  const browser = await puppeteer.launch();
4  const page = await browser.newPage();
5  await page.goto('https://example.com', { waitUntil: 'networkidle0' });
6  await page.waitForSelector('.dynamic-content');
7  const data = await page.evaluate(() => {
8    return Array.from(document.querySelectorAll('.dynamic-content'))
9      .map(el => el.textContent.trim());
10  });
11  console.log(data);
12  await browser.close();
13})();

ログインの自動化や「もっと見る」ボタンのクリック、無限スクロールにも対応できます。ページをプログラムでスクロールし、新しいコンテンツが出てくるのを待てばよいだけです()。

Thunderbit:JavaScript スクレイピングを簡単に、そして強力にする

正直に言うと、スクレイパーをゼロから書くのは強力ですが、時間も技術力も、継続的なメンテナンスも必要です。だからこそ私は の大ファンです。Thunderbit は AI 搭載の Chrome 拡張機能で、ウェブスクレイピングを 2クリックで完了できるようにします。

Thunderbit はビジネスユーザー向けに作られており、コーディングは不要です。仕組みは次のとおりです。

  • AI による項目提案: ボタンを1つ押すだけで、Thunderbit の AI がページを解析し、抽出に最適な列(「商品名」「価格」「メールアドレス」など)を提案します。
  • 2クリックでスクレイピング: 提案された項目を確認して「スクレイプ」をクリックすると、Thunderbit がデータをまとめて取得します。ページネーションやサブページも自動処理します。
  • サブページとページネーションへの対応: もっと詳しい情報が必要ですか? Thunderbit はサブページ(商品詳細やプロフィールなど)へのリンクをたどり、そのデータを表に統合できます。
  • クラウドモードとブラウザモード: ブラウザ内でスクレイピングすることもできますし(ログイン済みページに最適)、Thunderbit のクラウドを使って高速に実行することもできます(最大50ページを一度に処理可能)。
  • 無料の構造化エクスポート: Excel、Google Sheets、Airtable、Notion、CSV、JSON にデータをエクスポートできます。どれだけ使っても無料です。

実践で見る Thunderbit:データ抽出からエクスポートまで

たとえば、ビジネスディレクトリから連絡先情報を抽出したいとします。

  1. Thunderbit をインストールする)。
  2. ディレクトリのページを開く。
  3. 「AI による項目提案」をクリックする。 Thunderbit の AI が「氏名」「電話番号」「会社名」などの列を提案します。
  4. 「スクレイプ」をクリックする。 Thunderbit が複数ページにまたがるデータもまとめて収集します。
  5. Sheets または Excel にエクスポートする。 これで完了です。

何時間もかかっていた作業、あるいは開発者が必要だった作業が、今では数分で終わります。しかも Thunderbit は AI を使っているため、サイトのレイアウト変更にも強く、更新のたびにスクリプトが壊れる心配がありません()。

従来の JavaScript スクレイピングと Thunderbit を比べると、次のようになります。

比較項目手動の JS スクレイパー高度な JS(Puppeteer)Thunderbit AI スクレイパー
必要スキルコーディング高度なコーディング不要(ポイント&クリック)
動的コンテンツ限定的非常に強い標準搭載
セットアップ時間1 サイトあたり数時間数時間〜数日数秒〜数分
保守高い高い低い(AI が適応)
エクスポート方法カスタムコードカスタムコードExcel/Sheets などへ 1 クリック
コスト無料(ただし時間がかかる)無料(ただしハードウェア・時間が必要)無料プランあり、その後は月額 $15〜

高度な手法:JavaScript ライブラリで複雑なウェブスクレイピングを行う

advanced-js-scraping-overview.png さらに踏み込む必要がある場面もあります。たとえば、ログインの裏側にあるデータを取得したい、無限スクロールを処理したい、スクレイピング対策を回避したい、といったケースです。

  • ログイン/セッション: Puppeteer を使えば、フォーム入力やボタン操作でログインを自動化し、認証済みユーザーとしてデータを取得できます。
  • 無限スクロール: ページをプログラムでスクロールし、新しいコンテンツを待って、すべてのデータが読み込まれるまで繰り返します()。
  • スクレイピング対策: プロキシを使い、ユーザーエージェントをローテーションし、リクエストを制限してブロックを避けます。スクレイピング失敗の95%超はボット対策が原因です()。

プロのコツ: サイトが隠し API エンドポイントを持っている場合は、ブラウザ自体を使わずに済むことがあります(DevTools の Network タブで確認しましょう)。JSON を直接取得できるなら、スクレイパーはさらに高速になります。

JavaScript ウェブクローラーの最適化と保守

スクレイパーを作るのは、仕事の半分にすぎません。安定して動かし続けることが、もう半分です。

  • 非同期処理: async/await を使い、ページを並列で取得します(ただしサーバーに負荷をかけすぎないこと)。
  • バッチ処理: メモリ不足を避けるため、データを小分けに処理します。
  • エラーハンドリング: エラーを捕捉し、失敗したリクエストは再試行し、デバッグ用にログを残します。
  • ページネーション: 「次へ」リンクやボタンを検出して、ページを順に回します。
  • セレクタの堅牢性: 一意の ID やクラスを使い、サイトレイアウトが変わると壊れやすいセレクタは避けます。
  • 監視: スクレイパーが空データやエラーを返し始めたら通知が来るように設定します。

ベストプラクティス: スクレイピングは「一度作れば放置」で済むものではありません。定期的な更新と監視を前提に設計しましょう()。

JavaScript スクレイピングソリューションの比較:従来手法 vs. Thunderbit

ビジネスユーザー向けに、ざっと並べてみましょう。

アプローチ価値が出るまでの速さ必要スキル動的コンテンツ対応保守エクスポート方法拡張性
手動 JS(Cheerio)遅いコーディングいいえ高い自分で実装する静的サイトに向く
高度な JS(Puppeteer)中程度コーディング+はい高い自分で実装する1 ページごとの処理は遅め
Thunderbit速い不要はい(AI 搭載)低いSheets/CSV に 1 クリッククラウドまたはブラウザ

多くのビジネスユーザーにとって、Thunderbit は「このデータが欲しい」から「はい、スプレッドシートです」まで最短でたどり着ける方法です。

まとめと重要ポイント

JavaScript ウェブスクレイパーを作れることは、データ主導の今の時代における大きな武器です。私が学んだこと、そしておすすめしたいことは次のとおりです。

  • まずはシンプルに: 静的サイトには Cheerio と Axios を使う。
  • 必要なら高度な方法へ: 動的・インタラクティブ・ログイン必須のサイトには Puppeteer を使う。
  • AI ツールで時間を節約: 多くのビジネス用途では、 を使えばコードを書かずに数分で結果を得られます。
  • 保守を前提に考える: ウェブサイトは変わります。スクレイパーもそれに適応できるようにしておきましょう。
  • 常に倫理的にスクレイピングする: サイトの規約を尊重し、サーバーに過負荷をかけず、データは責任を持って扱いましょう。

面倒な作業なしでスクレイピングを試してみたいなら、して、その手軽さを体験してみてください。さらに深く知りたい方は、で、ほかのガイドやヒント、実例もご覧いただけます。

スクレイピングを楽しんで。セレクタがいつも一意でありますように!

AI ウェブスクレイパーを試す

よくある質問

1. JavaScript ウェブスクレイパーとは何ですか?
JavaScript ウェブスクレイパーとは、JavaScript で書かれたプログラム(またはスクリプト)で、ウェブサイトからデータを自動的に抽出するものです。ブラウザ内でもサーバー上(Node.js 使用)でも実行でき、特に動的で JavaScript が多いサイトの処理が得意です。

2. ウェブスクレイピングで Python ではなく JavaScript を選ぶ理由は何ですか?
JavaScript はウェブの言語なので、コンテンツを動的に読み込むサイトやユーザー操作が必要なサイトのスクレイピングに最適です。Python は静的サイトやデータ分析に強い一方、動的コンテンツには追加ツールが必要です。

3. JavaScript スクレイパーを作るには、どんなツールが必要ですか?
静的サイトなら、Node.js、Axios(または fetch)、Cheerio があれば十分です。動的サイトなら、ヘッドレスブラウザ自動化のために Puppeteer または Playwright を追加します。ノーコードでスクレイピングしたいなら、 を試してみてください。

4. Thunderbit はウェブスクレイピングをどう簡単にしますか?
Thunderbit は AI を使って、あらゆるサイトからデータを自動検出・抽出します。「AI による項目提案」をクリックし、次に「スクレイプ」、その後エクスポートするだけです。コードもセレクタ調整も不要です。

5. ウェブスクレイピングは合法で倫理的ですか?
ウェブスクレイピングは、適切に行えば合法です。公開されているデータだけを取得し、サイトの規約を尊重し、サーバーに負荷をかけすぎないようにしましょう。個人データは同意なしに取得せず、常に倫理的にデータを扱うことが大切です。

JavaScript スクレイピングを実際に見てみたいですか? チュートリアルは Thunderbit の を、さらに詳しい情報は をご覧ください。

さらに詳しく

Topics
JavascriptスクレイパーJavaScriptによるウェブスクレイピングJavascriptウェブクローラー

Thunderbitを試す

リードや各種データをわずか2クリックで取得。AI搭載。

Thunderbitを入手 無料で利用可能
AIでデータを抽出
Google Sheets、Airtable、Notionへ簡単にデータを転送できます
PRODUCT HUNT#1 Product of the Week