本ページは Webスクレイピング(Web Scraping)を多角的に解説します。 上のチップは、 検索・関連語の手がかりです。
Web スクレイピング(Web Scraping)は、 公開 Web サイトの情報を取得する手法。 ニュース記事収集、 価格比較、 不動産情報集約、 SNS 分析など データソースの拡張に多用されます。 ただし著作権、 利用規約、 サーバー負荷、 個人情報保護など 多くの法的・倫理的論点があり、 慎重な運用が必要です。
スクレイピングの基本フロー:
例:気象庁の天気情報、 不動産サイトの物件一覧、 Amazon の価格、 食べログの口コミ など、 Web 上の構造化された表は事実上すべてスクレイピング可能です(合法性は別)。
近年は JavaScript で後から表示される SPA(シングルページアプリ)が多く、 単純な HTTP では取得できない場合が増えています。 そのときは Selenium や Playwright でブラウザを自動操作します。
Webページから情報を抽出する技術
英語名 Web Scraping、 カテゴリ:データエンジニアリング。
.class, #id, div > p)例:47都道府県の人口データを Wikipedia から取得する流れ:
| ステップ | 所要時間 | 注意点 |
|---|---|---|
| 1. requests で HTML 取得 | 0.5 秒 | User-Agent 設定 |
| 2. BeautifulSoup でパース | 0.1 秒 | table タグを探す |
| 3. 表データ抽出 | 0.05 秒 | pandas.read_html が便利 |
| 4. クレンジング | 0.1 秒 | カンマ、 単位を削除 |
| 5. CSV 保存 | 0.01 秒 | UTF-8 BOM 注意 |
1 件 1 秒以下で完了。 ただし 1000 件取得なら 1000 秒待つ必要があり、 並列化と 礼儀ある間隔のバランスが必要。
最小コードで動かしてみる例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | import requests from bs4 import BeautifulSoup import pandas as pd import time url = 'https://example.com/data' headers = {'User-Agent': 'Mozilla/5.0 (research bot)'} r = requests.get(url, headers=headers) time.sleep(1) # 礼儀(1秒間隔) soup = BeautifulSoup(r.text, 'html.parser') table = soup.find('table', class_='data') df = pd.read_html(str(table))[0] df.to_csv('data/raw/scraped.csv', index=False, encoding='utf-8') |
requests では取れない。 Selenium / Playwright で対応。