商品一覧や求人情報を継続的に収集する業務では、手作業による転記に時間がかかり、入力漏れも起こりやすくなります。営業・オペレーション・ECの担当者にとって、ウェブスクレイピングは、こうしたデータ収集を効率化する選択肢の一つです。
スクレイパーの開発には複数の言語を利用できますが、Pythonは読みやすい構文と豊富なライブラリを備えた代表的な選択肢です。2023年にScrapingFishが実務者を対象に行った調査でも、Pythonは約62%という圧倒的なシェアを記録し、他言語を大きく引き離しました。
一方、Pythonによるスクレイピングでは、初期設定に加え、動的サイト、ボット対策、構造が一定でないデータへの対応が必要になる場合があります。本記事では、最初の環境構築から順に、実際に動かせる Python のウェブスクレイパー例、データの保存方法、エラー処理を解説します。さらに、Pythonと Thunderbit のようなAIツールを役割に応じて組み合わせる方法も取り上げます。
対象サイトからデータを取得する前に、利用規約、著作権、個人情報の取り扱い、アクセス頻度を確認することも重要です。営業リードの整理、競合価格の監視、Webデータのスプレッドシート化など、目的に合う範囲から手順を試せる構成です。
Pythonウェブスクレイピング入門:ゼロから始めるセットアップ
データスクレイピングとは?2026年の実践方法 Get Started Free
最初に、作業の対象と成果物を整理します。ウェブスクレイピング とは、Webサイトからデータを自動収集する処理です。スクレイパーがページへアクセスしてHTMLを解析し、商品価格、連絡先、レビューなど、指定した項目を取り出します。
業務では、営業リード候補の整理、価格監視、市場調査などに使うデータを収集できます。ただし、取得したデータがそのまま業務で使えるとは限りません。対象範囲、欠損、重複、更新日時を検証し、用途に合う形式へ整える工程まで含めて設計します (browsercat.com)。
ステップ1:Pythonをインストールする
まず必要になるのがPython 3です。インストール時点で利用できるバージョンは、公式Pythonサイト で確認できます。Windowsではインストーラーを実行し、「Add Python to PATH」が表示される場合はチェックを入れてください。Macなら Homebrew を使って brew install python で入れるか、直接ダウンロードしてもかまいません。インストールが終わったら、ターミナル(またはコマンドプロンプト)を開いて次を入力します。
python --version
または
python3 --version
Python 3.14.5 のようにバージョン番号が表示されれば、インストールは完了です。表示される番号は、導入したバージョンによって異なります。
ステップ2:仮想環境を作成する
仮想環境 を使えば、プロジェクトの依存関係を分離でき、ほかのPythonプロジェクトとの衝突も避けられます。プロジェクトフォルダで、次を実行してください。
# macOS/Linux
python3 -m venv .venv
# Windows
py -m venv .venv
有効化のしかたは、以下のとおりです。
- macOS/Linux:
source .venv/bin/activate - Windows:
.venv\Scripts\activate
これで、インストールするパッケージはこのプロジェクトの中だけに収まります (Python Packaging Guide)。
ステップ3:主要ライブラリをインストールする
次の基本パッケージを用意します。
- Requests: Webページの取得用。
- BeautifulSoup(bs4): HTMLの解析用。
- Scrapy: より高度で大規模なスクレイピング用。
下のコマンドでまとめて入れます。
pip install requests beautifulsoup4 scrapy
- Requests は、HTTP通信を手軽に扱えるようにしてくれます。
- BeautifulSoup は、HTMLからデータを探して取り出すのに役立ちます。
- Scrapy は、多数のページのクロール、エラー処理、データ書き出しまでこなせる高機能フレームワークです。
初心者なら、まずはRequests + BeautifulSoupから始めるのがよいでしょう。規模が大きくなってきたら、Scrapyが役立ちます。
ステップ4:プロジェクトフォルダを作る
ファイルは最初から整理しておきましょう。プロジェクト用のフォルダをひとつ作り、その中にスクリプト、データファイル、仮想環境をまとめておくと便利です。あとで管理が楽になります。
Pythonのウェブスクレイパー例:基本スクリプトとコード構成
それでは、シンプルなスクレイパーを組んでみましょう。Webページを取得し、解析し、データを抜き出すまでの流れです。以下は example.com を対象にした、最小限のサンプルです。
import requests
from bs4 import BeautifulSoup
URL = "https://example.com"
response = requests.get(URL)
response.raise_for_status() # 200 OK でなければエラーを出す
soup = BeautifulSoup(response.text, "html.parser")
# すべての段落タグを取得
paragraphs = soup.find_all('p')
for idx, p in enumerate(paragraphs, start=1):
print(f"Paragraph {idx}: {p.get_text()}")
このコードの処理内容
- 必要なライブラリを読み込みます。
requests.getでページの内容を取得します。- BeautifulSoupに渡してHTMLを解析させます。
<p>タグをすべて取得し、その本文を順に表示します。
ここでつまずきやすい箇所:
response.status_codeを確認しないまま進む(200 OKの確認は省かないこと)。- 見つからなかった要素、つまり
Noneに.get_text()を呼び出してしまう。 - 仮想環境の有効化を忘れる(その結果importが通らなくなる)。
「読み込み → 取得 → 解析 → 抽出 → 出力」というこの5つのステップが、多くのPythonスクレイパーに共通する基本構成です。
PythonでWebページをスクレイピングする方法:ステップごとの手順
実際のスクレイピング作業の流れを、順番にたどっていきましょう。
1. Webサイトを調べる
ブラウザを開き、取得したいデータを右クリックして「検証」を選びます。すると開発者ツールが立ち上がり、HTML構造を確認できます。狙ったデータを特定できる、固有のタグ・クラス・IDを探しましょう (realpython.com)。
2. ページを取得する
RequestsでHTMLを取得します。
headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(URL, headers=headers)
response.raise_for_status()
User-Agentは、リクエスト元のクライアント情報をサーバーへ伝えるために設定します。ただし、設定しただけでボット対策を回避できるとは限りません。対象サイトの利用規約とアクセス条件に従い、拒否された場合は処理を停止して取得方法を見直します。
3. HTML を解析する
soup = BeautifulSoup(response.text, "html.parser")
4. データを見つけて抽出する
たとえば求人情報をスクレイピングしていて、それぞれが <div class="job-card"> に収まっているとします。
job_cards = soup.find_all('div', class_='job-card')
for card in job_cards:
title = card.find('h2', class_='title').get_text(strip=True)
company = card.find('h3', class_='company').get_text(strip=True)
print(title, company)
もっと込み入った検索には、.find()、.find_all()、あるいはCSSセレクターを使う .select() が使えます。
5. 複数項目を扱う(リスト)
商品一覧や求人カードのように、複数のコンテナを順番に処理し、必要な項目を抜き出します。あとで書き出しやすいよう、辞書のリストにまとめておくと便利です。
6. トラブルシューティング
- 空の結果が返るときは、セレクターを見直しましょう。クラス名が変わったか、コンテンツがJavaScriptで読み込まれている可能性があります。
response.text[:500]を表示して、狙いどおりのHTMLが取得できているか確かめましょう。
Pythonのウェブスクレイパー例:データ保存とエクスポート
データが取れたら、どこかに保存したくなります。代表的なやり方は次のとおりです。
コンソールに出力する
手早い確認には便利ですが、本番運用には向きません。
CSV に書き出す
import csv
data = [
{"Name": "Alice", "Age": 25},
{"Name": "Bob", "Age": 30},
]
with open("output.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=["Name", "Age"])
writer.writeheader()
writer.writerows(data)
Excel にエクスポートする
pandas と openpyxl が入っていれば、次のようにできます。
import pandas as pd
df = pd.DataFrame(data)
df.to_excel("output.xlsx", index=False)
データベースに保存する
軽めの用途なら、SQLiteはPythonに最初から入っています。
import sqlite3
conn = sqlite3.connect("scraped_data.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS people (name TEXT, age INTEGER)")
for row in data:
cursor.execute("INSERT INTO people VALUES (?, ?)", (row["Name"], row["Age"]))
conn.commit()
conn.close()
どれを選ぶべき?
- CSV: スプレッドシート向きで、共有もしやすいです。
- Excel: 書式付きのレポートや、複数シートを使いたいときに向いています。
- データベース: 大規模、あるいは継続的に回すプロジェクト向きです。
CSVなどのテキスト形式へ書き出す場合は、利用先に合う文字コードを指定します。上記のCSV例では encoding="utf-8" を使用しています (decodo.com)。
Thunderbit と Python:スクレイピング作業を加速する
ここでは、Pythonと役割を分けて使えるAI搭載のChrome拡張機能として、Thunderbit を取り上げます。
Thunderbitの主な機能と利用時の確認点
- AI Suggest Fields: ThunderbitのAIがページを読み取り、抽出項目の候補を提示します。提案された列は、対象ページと業務目的に合うか見直してから使用します。
- ポイント&クリックの操作: 拡張機能を開き、AIの提案、取得範囲、サンプル結果を確かめてから「Scrape」を実行します。ページ構造によっては項目の修正が必要です。
- サブページのスクレイピング: 商品ページやプロフィールページなどの詳細ページから追加情報を取得する機能は、対象サイトの構造や設定によって利用条件が異なります。実行前に遷移先と取得件数を検証します。
- どこへでもエクスポート: データはCSVやExcelとして出力できるほか、Google Sheets、Notion、Airtableへの書き出しにも対応しています。利用できる出力先や条件は、現行プランと製品仕様を照合してください (Thunderbit Export)。
まずは1ページを対象に、抽出列、欠損、重複、出力形式を比較してから、対象範囲を広げると判断しやすくなります。
ThunderbitとPythonの役割分担
たとえば、JavaScriptを多用するECサイトでは、Requestsだけでは必要なデータを取得できない場合があります。ブラウザ上で動くThunderbitは候補になりますが、ログイン後ページを含む対応範囲は、対象サイトの利用規約、認証方式、ページ構造、Thunderbitの設定によって異なります。取得できたデータをエクスポートし、その後の分析、レポート作成、自動化をPythonで行うと、役割を分けやすくなります。
例:
- Thunderbitで動的サイトから商品一覧(画像、価格、レビューを含む)をスクレイピングする。
- CSVへエクスポートする。
- Pythonで傾向を分析し、ほかのデータセットと結合し、アラートを自動化する。
この構成は、ブラウザ上でのデータ取得と、コードによる加工・分析を分けたい場合に向いています。導入前に、対象ページで必要な項目が取得できるかを検証し、認証情報や個人情報の扱いも決めておきます。
Pythonのウェブスクレイパーの精度と安定性を高める方法
ウェブスクレイピングは、ただデータが取れればよい、という話ではありません。正しい データを、安定して取り続けられることが重要です。スクレイパーを安定稼働させるコツを紹介します。
1. Webサイトの変更に対応する
サイトのHTMLは頻繁に変更されます。セレクターは、できるだけ壊れにくく組みましょう。タグの位置に頼るのではなく、固有のIDや安定したクラス名を優先するのがコツです。
2. エラー処理を入れる
requestsと解析のコードは、try/except で包んでおきましょう。
import time
for attempt in range(3):
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
break
except Exception as e:
if attempt < 2:
time.sleep(5)
else:
print(f"3回試行しても失敗しました: {e}")
3. User-Agentと接続経路を適切に設定する
User-Agentには、運用するクライアントを識別できる一貫した情報を設定します。アクセス元を偽装する目的でランダムに変更するのではなく、対象サイトの条件とアクセス頻度に合わせて運用します。プロキシが必要な場合も、許可された接続経路や社内要件のために使用し、IP制限やボット対策の回避には使わないでください (scrapingfish.com)。
4. robots.txtと利用条件を照合する
サイトの robots.txt と利用規約を読み、取得対象、利用目的、アクセス頻度が許容範囲にあるかを照合します。公開されているデータでも、自由に収集・再利用できるとは限りません。著作権、個人情報、契約上の制限を考慮し、サーバーに過度な負荷をかけない設計にします (rayobyte.com)。
5. ログを残し、監視する
Pythonの logging モジュールで、成功も失敗も記録に残しましょう。スクレイパーを定期実行するなら、失敗した日や取得件数がゼロだった日にアラートを送る仕組みも用意しておくと安心です。
ThunderbitのAI機能をPythonワークフローに組み込む方法
Thunderbitは、抽出項目の設定、サブページの処理、データの整形や出力を支援するために利用できます。Python側では、出力後の分析、結合、可視化、自動処理を担当させると、各工程の役割が明確になります。
AI が提案するデータスキーマ
ThunderbitのAIは、ページ上の情報から抽出項目の候補を提示します。商品ページでは、「商品名」「価格」「画像URL」などが候補になる場合があります。提案結果はページ構造によって変わるため、必要な列が含まれているか、値が正しい要素から取得されているかをサンプルで検証します。
サブページとページネーションの処理
Thunderbitでは、詳細ページや複数の結果ページを対象に追加データを取得できる場合があります。利用可否は、対象サイトのページ構造、ページネーション方式、ログイン状態、設定によって異なります。EC、不動産、リード獲得で使う場合は、取得対象ページと終了条件を設定し、抜けや重複がないかを照合します。
AI によるデータクリーニングと拡張
各項目にAIプロンプトを設定できる場合は、スクレイピングと同時に翻訳、要約、分類、文字列の整形を行えます。たとえば、レビューを「ポジティブ」「ネガティブ」に分類したり、価格文字列から数値部分を抽出したりする用途です。AIによる処理結果には誤分類や変換漏れが含まれる可能性があるため、判定基準を決め、元データと結果を照合します。
ワークフロー例
- Thunderbitでデータをスクレイピングし、構造化する(AIが項目を提案)。
- CSVまたはGoogle Sheetsへエクスポートする。
- Pythonで分析、可視化、後続アクションの自動化を行う。
このワークフローでは、コーディングをしないメンバーが抽出条件とサンプル結果を整理し、Pythonを扱うメンバーが分析や後続処理を担当できます。自動化だけに任せず、抽出項目、欠損、重複、形式を担当者間で共有してから次工程へ渡します。
Pythonのウェブスクレイパー例:上級者向けのヒントとよくある問題
ここからは、動的コンテンツ、ページネーション、定期実行など、基本スクリプトの次に検討する項目を整理します。
動的コンテンツをスクレイピングする
最近のサイトの多くは、JavaScriptでデータを読み込みます。Requests + BeautifulSoupでは空のデータや欠けたデータしか取れない、という場面では、次を検討します。
- Selenium または Playwright: 実際のブラウザを自動操作してページを描画させ、そのうえでHTMLを取り込みます。
- API を確認する: データが裏側のAPI呼び出しで読み込まれていることがあります(多くはJSONを返します)。ブラウザのNetworkタブでエンドポイントを調べる場合は、公開範囲、認証、利用条件を先に確認し、アクセス権限を回避する方法として使わないでください。
ページネーションの処理
URLパラメータを切り替えてページを巡ります(例: ?page=2)。あるいは、BeautifulSoupで「次へ」リンクを取得し、ページが尽きるまでたどっていきます。
スクレイピングを定期実行する
Pythonの schedule ライブラリやcronジョブを使えば、スクレイパーを自動で実行できます。コードを書かずに定期実行したい場合は、現在のプランと設定で利用できる範囲を確かめたうえで、Thunderbitのスケジュール機能を候補にできます。
よくある問題
- CAPTCHA: 自動回避を試みず、取得を停止して対象サイトの利用条件を見直します。必要に応じて、公式API、許可された取得方法、人手による処理を検討します。
- 文字コードの問題: ファイルを書き出すときは、利用先に合う文字コードを指定します。CSVの一般的な例として
encoding="utf-8"を利用できます。 - IP ブロック: アクセス頻度、同時接続数、レスポンス内容を見直し、レート制限と利用規約に従います。制限を回避する目的でプロキシやUser-Agentをローテーションしないでください。
まとめと重要なポイント
AI を使ってあらゆる Web サイトをスクレイピングする方法 Get Started Free
Pythonによるウェブスクレイピングは、基本構成を分けて学ぶと取り組みやすくなります。
- 環境と主要ライブラリをそろえる。
- 対象サイトを調べ、セレクターの方針を立てる。
- 取得・解析・抽出をこなすシンプルなスクリプトを書く。
- 業務に合った形式で結果を書き出す。
動的ページや複数ページを扱う場合は、Thunderbit のようなAIツールとPythonを役割に応じて組み合わせる方法があります。項目提案、サブページのスクレイピング、エクスポート機能の利用条件は、対象サイト、設定、プランによって異なります。自動化によって削減できる作業量も、ページ構造や必要なデータ品質に左右されます。
運用では、取得件数だけでなく、欠損、重複、更新日時、利用規約、著作権、個人情報、サーバー負荷を記録します。営業、EC、分析のいずれの用途でも、最終的なゴールと担当者の判断基準を先に決めておくことが重要です。
まずは対象ページを1つ選び、必要な列が正しく取得できるか、期待する形式で出力されるかを確かめてください。その結果をもとに、Pythonだけで実装する範囲とThunderbitを組み合わせる範囲を決めると、段階的に導入できます。
さらに詳しい手順は、Thunderbit Blog のガイドで参照できます。Thunderbit Chrome Extension を試す場合も、最初に1ページの抽出精度と出力形式を比較してから対象を広げる方法が現実的です。
よくある質問
1. Pythonでウェブスクレイピングを始める基本手順は?
Python 3を入れ、RequestsとBeautifulSoupでページの取得と解析を試すのが基本です。最初は構造の素直なサイトで、レスポンス、セレクター、出力結果を検証し、そこから一段ずつ複雑なサイトへ進めます。
2. JavaScript でデータを読み込むサイトにはどう対応すればいいですか?
JavaScript依存の強いサイトでは、SeleniumやPlaywrightといったブラウザ自動化ツールを使う方法があります。ブラウザのNetworkタブでJSONなどを返すAPI呼び出しを調べる場合は、公開範囲、認証、利用条件を先に照合してください。
3. ビジネス利用ではどの出力形式を選ぶべきですか?
CSVは、ExcelやGoogle Sheetsで扱いやすく、幅広い共有用途に向いています。書式や複数シートが必要ならExcel、システム連携にはJSON、継続的な保存にはSQLiteなど、後続工程に合わせて選びます。ThunderbitからGoogle Sheets、Notion、Airtableへ送る場合は、現行プランで利用できる出力先と条件を確かめます。
4. 対象サイトに負荷をかけず、利用条件に沿って実行するには?
識別可能なUser-Agentを設定し、アクセス間隔と同時接続数を抑え、レート制限、robots.txt、利用規約に従います。プロキシを利用する場合も、IP制限やアクセス制御の回避を目的にせず、許可された接続要件の範囲に限定します。個人情報や機微なデータは、取得目的と取り扱い根拠が明確でない限り対象にしません。
5. Thunderbitは非エンジニアの作業をどのように支援しますか?
Thunderbitでは、AIによる抽出項目の提案、サブページやページネーションの処理、構造化データの出力を利用できる場合があります。対応範囲は対象サイト、設定、プランによって異なるため、最初に1ページで提案された列と取得結果を照合します。込み入った変換や大規模処理が必要な場合は、Pythonや開発者向けの方法も比較対象になります。
データ収集を自動化する場合は、まず対象ページを1つ選び、Thunderbit で必要な列、抽出精度、出力形式を検証してから、定期運用へ広げてください。
AIウェブスクレイパーを試す Get Started Free
さらに詳しく


