Python Seleniumによるウェブスクレイピング完全ガイド:ステップバイステップで解説

最終更新日:January 23, 2026

ウェブサイトの構造は昔と比べて本当に大きく変わりましたよね。今ではほとんどのサイトがJavaScriptで動的にコンテンツを表示していて、無限スクロールやポップアップ、クリックしないと見えないダッシュボードなんかも当たり前になっています。実際、しているので、昔ながらの静的HTMLだけを読むスクレイピングツールだと、肝心なデータが全然取れないことも多いです。もし最新のECサイトで商品価格を集めたり、地図上の不動産情報を集めようとしたことがあるなら、「欲しいデータがソースに見当たらない!」とイライラした経験、きっとあるはずです。

そんな時に頼りになるのがSeleniumによるスクレイピングです。僕自身、長年自動化ツールを作ってきて、いろんなサイトをスクレイピングしてきましたが、Seleniumを使いこなせると動的なデータ収集が本当に楽になります。このSeleniumウェブスクレイピングチュートリアルでは、環境構築から自動化までの流れを実践的に解説しつつ、と組み合わせて、すぐに使える構造化データを手に入れる方法も紹介します。ビジネス分析や営業、Pythonに興味がある人も、実用的なスキルと「XPathのデバッグで鍛えられるメンタル」が手に入るはずです。

Seleniumとは?ウェブスクレイピングで使う理由

selenium-dynamic-vs-static-web-scraping.png まずは基本から。は、ChromeやFirefoxなどの本物のブラウザをコードで操作できるオープンソースのフレームワークです。まるでロボットが人間のようにページを開き、ボタンをクリックし、フォーム入力やスクロール、JavaScriptの実行まで全部やってくれます。これが大事なのは、今のウェブサイトの多くがユーザーの操作後に初めてデータを表示する仕組みだからなんです。

なぜSeleniumが必要なのか?
BeautifulSoupやScrapyみたいな従来のツールは、静的HTMLの解析には最強ですが、JavaScriptで後から表示されるデータには全然太刀打ちできません。でもSeleniumなら、ページ上の動きをリアルタイムで再現できるので、例えばこんな時に大活躍します:

  • 「もっと見る」ボタンを押さないと出てこない商品リストの取得
  • 動的に更新される価格やレビューの取得
  • ログインフォームやポップアップ、無限スクロールへの対応
  • ダッシュボードや地図など、インタラクティブな要素からのデータ抽出

つまり、ページの読み込みやユーザー操作後に現れるデータを取りたい時、Seleniumは最強の武器です。

Python Seleniumでウェブスクレイピングする基本ステップ

Seleniumによるスクレイピングは、ざっくり3つのステップに分かれます:

ステップやることポイント
1. 環境構築Selenium・WebDriver・Pythonライブラリのインストール事前準備でトラブル回避
2. 要素の特定ID・クラス・XPathなどで欲しいデータを探すJavaScriptで隠れた情報も取得可能
3. データ抽出&保存テキストやリンク、テーブルをCSV/Excelに保存ウェブデータを実用的な形に変換

それぞれのステップを、実際のコード例と一緒に見ていきましょう。

ステップ1:Python Selenium環境のセットアップ

まずはSeleniumとブラウザドライバー(ChromeならChromeDriver)をインストールしましょう。最近はセットアップもかなり簡単になっています。

Seleniumのインストール

ターミナルでこのコマンドを実行:

1pip install selenium

WebDriverの入手

  • Chromeの場合をダウンロード(Chromeのバージョンに合わせて)
  • Firefoxの場合をダウンロード

ワンポイント: Selenium 4.6以降はSelenium Managerでドライバー自動取得ができるので、PATH設定の手間がかなり減りました()。

Seleniumの「Hello World」

1from selenium import webdriver
2driver = webdriver.Chrome()  # またはwebdriver.Firefox()
3driver.get("https://example.com")
4print(driver.title)
5driver.quit()

トラブルシューティング:

  • 「driver not found」エラーはPATHやSelenium Managerを確認
  • ブラウザとドライバーのバージョンが合っているかチェック
  • GUIのないサーバーではヘッドレスモードを使う(後述)

ステップ2:データ抽出のための要素特定

次は、Seleniumに「どのデータを取りたいか」を伝えます。ウェブページはdivやspan、tableなどいろんな要素でできていて、Seleniumではいろんな方法で要素を探せます。

主なロケーターの種類

  • By.ID:一意のIDで要素を取得
  • By.CLASS_NAME:CSSクラスで取得
  • By.XPATH:XPath式で柔軟に取得(ただし壊れやすいことも)
  • By.CSS_SELECTOR:複雑なクエリもOKなCSSセレクター

使用例:

1from selenium.webdriver.common.by import By
2# IDで取得
3price = driver.find_element(By.ID, "price").text
4# XPathで取得
5title = driver.find_element(By.XPATH, "//h1").text
6# CSSセレクターで全商品画像を取得
7images = driver.find_elements(By.CSS_SELECTOR, ".product img")
8for img in images:
9    print(img.get_attribute("src"))

コツ: できるだけシンプルで安定したロケーター(ID>クラス>CSS>XPath)を使うのがベスト。データの表示に時間がかかる場合は、明示的な待機を使うと安定します:

1from selenium.webdriver.support.ui import WebDriverWait
2from selenium.webdriver.support import expected_conditions as EC
3wait = WebDriverWait(driver, 10)
4price_elem = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".price")))

これで、データの表示遅延によるエラーを防げます。

ステップ3:データの抽出と保存

要素を特定できたら、データを取得して保存しましょう。

テキスト・リンク・テーブルの抽出

例えば、商品テーブルをスクレイピングする場合:

1data = []
2rows = driver.find_elements(By.XPATH, "//table/tbody/tr")
3for row in rows:
4    cells = row.find_elements(By.TAG_NAME, "td")
5    data.append([cell.text for cell in cells])

PandasでCSV保存

1import pandas as pd
2df = pd.DataFrame(data, columns=["Name", "Price", "Stock"])
3df.to_csv("products.csv", index=False)

Excel(df.to_excel("products.xlsx"))やGoogle Sheets APIでの保存もOKです。

実践例:商品タイトルと価格の取得

1from selenium import webdriver
2from selenium.webdriver.common.by import By
3import pandas as pd
4driver = webdriver.Chrome()
5driver.get("https://example.com/products")
6data = []
7products = driver.find_elements(By.CLASS_NAME, "product-card")
8for p in products:
9    title = p.find_element(By.CLASS_NAME, "title").text
10    price = p.find_element(By.CLASS_NAME, "price").text
11    data.append([title, price])
12driver.quit()
13df = pd.DataFrame(data, columns=["Title", "Price"])
14df.to_csv("products.csv", index=False)

SeleniumとBeautifulSoup/Scrapyの違い:どちらを使うべき?

selenium-vs-traditional-scrapers-comparison.png 「SeleniumとBeautifulSoup/Scrapy、どっちがいいの?」という疑問に、簡単な比較表でまとめてみました:

ツール得意な用途JavaScript対応速度・リソース消費
Selenium動的・インタラクティブなサイトやや遅い・メモリ多め
BeautifulSoupシンプルな静的HTMLの取得×非常に高速・軽量
Scrapy大量の静的サイトクロール△(一部プラグイン)超高速・非同期・低メモリ
Thunderbitノーコードでビジネス向けスクレイピング〇(AI対応)小〜中規模なら高速

*Scrapyも一部プラグインで動的コンテンツ対応できますが、得意分野ではありません()。

Seleniumが向いているケース:

  • クリックやスクロール、ログイン後にデータが表示される場合
  • ポップアップや無限スクロール、動的ダッシュボードの操作が必要な場合
  • 静的スクレイパーでは取れない場合

BeautifulSoup/Scrapyが向いているケース:

  • データが最初からHTMLに含まれている場合
  • 数千ページを高速にクロールしたい場合
  • リソース消費を抑えたい場合

「コード不要で動的サイトをスクレイピングしたい」なら、のAI機能で「AIフィールド提案」を使い、SheetsやNotion、Airtableへワンクリックでエクスポートもできます(詳細は後述)。

SeleniumとPythonでスクレイピングを自動化する方法

毎回手動でスクリプトを実行するのは面倒ですよね。PythonのスケジューラーやOSのタスクスケジューラー(Linux/Macならcron、Windowsならタスクスケジューラー)を使えば、Seleniumのジョブを自動化できます。

scheduleライブラリの利用例

1import schedule
2import time
3def job():
4    # ここにスクレイピング処理
5    print("Scraping...")
6schedule.every().day.at("09:00").do(job)
7while True:
8    schedule.run_pending()
9    time.sleep(1)

cron(Linux/Mac)の場合

毎時実行したい場合はcrontabに以下を追加:

10 * * * * python /path/to/your_script.py

自動化のコツ:

  • ヘッドレスモードで実行し、GUIのポップアップを防ぐ
  • エラーをログに記録し、通知設定も検討
  • driver.quit()で必ずブラウザを閉じてリソース解放

Seleniumスクレイピングを高速・安定化するテクニック

Seleniumは便利ですが、工夫しないと遅くなったりリソースを食いがちです。効率化のポイントをまとめました:

1. ヘッドレスモードで実行

ブラウザ画面を表示せず、バックグラウンドで動かすことで高速化:

1from selenium.webdriver.chrome.options import Options
2opts = Options()
3opts.headless = True
4driver = webdriver.Chrome(options=opts)

2. 画像など不要なリソースをブロック

テキストだけ欲しい時は画像読み込みをオフに:

1prefs = {"profile.managed_default_content_settings.images": 2}
2opts.add_experimental_option("prefs", prefs)

3. 効率的なロケーターを使う

  • 複雑なXPathよりIDやシンプルなCSSセレクターを優先
  • time.sleep()は避けて、WebDriverWaitで明示的に待機

4. 待機時間をランダム化

人間っぽい動きを再現して、ブロック対策にも:

1import random, time
2time.sleep(random.uniform(1, 3))

5. ユーザーエージェントやIPのローテーション

大量にスクレイピングする時は、ユーザーエージェントやプロキシを切り替えて対策を。

6. セッション管理とエラー処理

  • try/exceptで要素が見つからない時も安全に処理
  • エラー時はログやスクリーンショットで原因特定

さらに詳しい最適化はも参考に。

応用編:SeleniumとThunderbitの連携で構造化データを一発エクスポート

Seleniumで生データを取った後、を使えば、データの整理やエクスポートが一気に楽になります。

  • フィールド自動検出: ThunderbitのAIがCSVやページ内容からカラム名を提案(「AIフィールド提案」)
  • サブページスクレイピング: 商品ページなどURLリストがあれば、Thunderbitが各ページを巡回して詳細情報を自動で追加
  • データ加工: 翻訳・カテゴリ分け・分析もワンクリック
  • 多彩なエクスポート: Google Sheets、Airtable、Notion、CSV、Excelに即出力

ワークフロー例:

  1. Seleniumで商品URLとタイトル一覧を取得
  2. データをCSVでエクスポート
  3. ThunderbitでCSVを読み込み、AIフィールド提案を利用
  4. サブページスクレイピングで画像やスペックなど詳細情報を自動取得
  5. 最終データをSheetsやNotionにエクスポート

この組み合わせなら、面倒なデータ整理から解放されて、分析や活用に集中できます。詳しくはもチェックしてみてください。

Seleniumスクレイピングのベストプラクティス&トラブル対策

ウェブスクレイピングは釣りみたいなもの。大物が釣れる日もあれば、思わぬトラブルに遭遇することも。安定して、かつ倫理的に運用するためのポイントをまとめます:

ベストプラクティス

  • robots.txtや利用規約を守る: スクレイピングがOKか必ず確認
  • リクエスト間隔を調整: サーバーに負荷をかけないよう、適度に待機しHTTP 429エラーに注意
  • APIがあればAPIを優先: 公開APIがあるならそっちを使うのが安全・安定
  • 公開データのみ取得: 個人情報や機密データは避けて、プライバシーにも配慮
  • ポップアップやCAPTCHA対策: Seleniumでポップアップを閉じる、CAPTCHAは自動化が難しいので注意
  • ユーザーエージェントや待機時間のランダム化: 検知・ブロック対策に有効

よくあるエラーと対処法

エラー内容対策
NoSuchElementException要素が見つからないロケーターを再確認・待機を追加
タイムアウトエラーページや要素の表示が遅い待機時間を延長・ネットワーク確認
ドライバー/ブラウザ不一致Seleniumがブラウザを起動できないドライバーとブラウザのバージョンを揃える
セッションクラッシュブラウザが予期せず終了ヘッドレスモード利用・リソース管理

さらに詳しいトラブル対策はも参考にしてください。

まとめ&ポイント

動的ウェブスクレイピングは、もはや一部の開発者だけのものじゃありません。Python Seleniumを使えば、どんなブラウザも自動操作できて、JavaScript満載のサイトからも必要なデータを自在に取れます。ビジネス、リサーチ、好奇心…どんな目的でも活用できます。

  • 動的・インタラクティブなサイトにはSeleniumが最適
  • 基本は「環境構築→要素特定→抽出&保存」の3ステップ
  • 定期実行でデータを常に最新に保つ
  • ヘッドレスモードや効率的なロケーターで高速・安定化
  • Thunderbitと組み合わせれば、データ整理やエクスポートも一瞬

まずは上記のコード例から始めてみてください。さらに一歩進んだデータ活用を目指すなら、のAI機能もぜひ体験してみてください。より詳しい解説や最新情報はで随時公開中です。

みんなのスクレイピングが、いつも狙ったデータをしっかりキャッチできますように!

Thunderbit AIウェブスクレイパーを無料で試す

よくある質問(FAQ)

1. Seleniumを使うメリットは?BeautifulSoupやScrapyとどう違う?
Seleniumは、ユーザー操作やJavaScript実行後に表示される動的なデータの取得に最適です。BeautifulSoupやScrapyは静的HTMLの高速取得に向いていますが、動的要素の操作やクリック・スクロールの再現はできません。

2. Seleniumスクレイパーを高速化するには?
ヘッドレスモードの利用、画像など不要リソースのブロック、効率的なロケーターの活用、人間らしいランダム待機の追加が効果的です。詳細はも参照。

3. Seleniumのスクレイピングを自動実行できますか?
はい。PythonのscheduleライブラリやOSのスケジューラー(cronやタスクスケジューラー)で定期実行が可能です。自動化すれば、常に最新データを取得できます。

4. Seleniumで取得したデータのおすすめエクスポート方法は?
PandasでCSVやExcelに保存できます。さらにGoogle SheetsやNotion、Airtableなどに出力したい場合は、にデータをインポートし、ワンクリックでエクスポートできます。

5. SeleniumでポップアップやCAPTCHAにどう対応する?
ポップアップは閉じるボタンを特定してクリック可能ですが、CAPTCHAは自動化が難しいため、手動対応や専用サービスの利用を検討し、必ずサイトの利用規約を守りましょう。

さらに詳しいスクレイピングチュートリアルやAI自動化のコツ、最新のビジネスデータ活用法はでチェックできます。

さらに学ぶ

Shuai Guan
Shuai Guan
Co-founder/CEO @ Thunderbit. Passionate about cross section of AI and Automation. He's a big advocate of automation and loves making it more accessible to everyone. Beyond tech, he channels his creativity through a passion for photography, capturing stories one picture at a time.
Topics
SeleniumによるスクレイピングSeleniumウェブスクレイピングチュートリアルPython Seleniumでウェブサイトをスクレイピング
目次

Thunderbitを試す

リードや各種データも2クリックで取得。AI搭載。

Thunderbitを入手 無料で使える
AIでデータ抽出
Google Sheets、Airtable、Notionへ簡単にデータ転送
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week