Navigation

Pythonでスクレイピング:BeautifulSoupとSelenium使い分け

📅 7月 8, 2025
👤
2 min read

Pythonでスクレイピング:BeautifulSoupとSelenium使い分け

概要

WebスクレイピングはWebページからデータを取得するための一般的な手法です。PythonではBeautifulSoupとSeleniumがよく使われています。BeautifulSoupはHTMLやXMLからデータを抽出するためのライブラリであり、Seleniumはブラウザを自動操作するためのツールです。この記事では、それぞれの特徴と使い分けについて解説します。

解決する問題や課題

Webスクレイピングを行う際には、対象サイトの構造や取得したいデータの種類によって最適なツールを選択する必要があります。BeautifulSoupは静的なWebページのデータ取得に適しており、SeleniumはJavaScriptが動的に生成するコンテンツを取得する際に有用です。適切に使い分けることで、効率的にスクレイピングを行うことができます。

前提知識・必要ライブラリ

  • Pythonの基本的な知識
  • BeautifulSoup
  • Selenium

環境構築


# 必要ライブラリのインストール
pip install beautifulsoup4
pip install selenium

実装コード


from bs4 import BeautifulSoup
from selenium import webdriver

# BeautifulSoupを使用して静的なWebページからデータを取得
html = "<html><body><h1>Hello, World!</h1></body></html>"
soup = BeautifulSoup(html, 'html.parser')
print(soup.h1.text)

# Seleniumを使用して動的なWebページからデータを取得
driver = webdriver.Chrome()
driver.get("https://example.com")
elem = driver.find_element_by_css_selector('h1')
print(elem.text)
driver.quit()

使用例


# Seleniumを使用してJavaScriptが動的に生成する要素を取得する例
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com")
elem = driver.find_element_by_css_selector('.dynamic-content')
print(elem.text)
driver.quit()

テストコード


import pytest
from bs4 import BeautifulSoup

def test_beautifulsoup():
    html = "<html><body><h1>Hello, Test!</h1></body></html>"
    soup = BeautifulSoup(html, 'html.parser')
    assert soup.h1.text == "Hello, Test!"

def test_selenium():
    driver = webdriver.Chrome()
    driver.get("https://example.com")
    elem = driver.find_element_by_css_selector('h1')
    assert elem.text == "Example Website"
    driver.quit()

応用・カスタマイズ

Webスクレイピングの応用として、取得したデータをデータベースに保存する自動化や定期実行などがあります。また、Seleniumのヘッドレスモードを使用することでGUIを表示せずにブラウザを操作することも可能です。

関連技術

  • Scrapy: Webスクレイピングフレームワーク
  • Requests: HTTPリクエストを簡単に扱うためのライブラリ
  • Pythonでスクレイピング入門: 書籍やオンラインリソースを活用してスキルを磨く

この記事では、PythonでWebスクレイピングを行う際にBeautifulSoupとSeleniumの使い分けについて紹介しました。適切なツールを選択し、効率的にデータ取得を行うことで、効率的なスクレイピングが可能となります。是非、実際にコードを書いて試してみてください。

← Back to Python