🔥
ウェブスクレイピング | Python3
概要
Python を使ってウェブスクレイピングする場面があったので、そのメモ。Python によるスクレイピングには、静的に HTML を取得する方法と、ブラウザを使って動的に HTML を取得する方法がある。今回は、後者のほうのやり方。
環境
- Windows 11 x64
- Python 3.12.10
- pip 25.0.1
Geckodriver のインストール
Geckodriver には Firefox ブラウザが必要。Chrome 用のものもあるが、今回は使わなかった。また、FireFox のバージョンと Python のバージョンによって、使用する Geckodriver のバージョンを選ぶ必要がある。バージョンの互換性については、このページから確認できる。Geckodrive 本体は、このページからダウンロードする。
依存関係のインストール
pip install selenium webdriver_manager urllib3
コード
scraping.py
import sys
import codecs
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager
from urllib.parse import urlparse
import time
# 結果出力の文字コードを UTF-8 にする
sys.stdout.reconfigure(encoding="utf-8")
# コマンドライン引数からURLを取得
if len(sys.argv) < 2:
print("使い方: python script.py {URL}")
sys.exit(1)
url = sys.argv[1]
# Firefox ドライバーのセットアップ
driver = webdriver.Firefox()
# hogehoge サイトをスクレイピング
def scrape_hogehoge(driver):
title = driver.find_element(By.CSS_SELECTOR, ".main")
inner = driver.find_element(By.CSS_SELECTOR, ".inner")
p = inner.find_element(By.CSS_SELECTOR, "p")
print(f"{title.text}: {p.text.strip()}")
# piyopiyo サイトをスクレイピング
def scrape_piyopiyo(driver):
title = driver.find_element(By.CSS_SELECTOR, "h1")
print(title.text)
# その他のサイトをスクレイピング
def scrape_other_site(driver):
title = driver.title # h1 はよく使うので勝手に取得してくれる
print(title)
try:
# 指定されたURLにアクセス
driver.get(url)
# 読み込み完了を待つ
time.sleep(3)
# ドメインを取得して処理を振り分け
domain = urlparse(driver.current_url).netloc
if "hogehoge.com" in domain:
scrape_hogehoge(driver)
elif "piyopiyo.io" in domain:
scrape_piyopiyo(driver)
else:
scrape_other_site(driver)
finally:
driver.quit()
Discussion