本文へスキップ
BecomeCoder

Pythonスクレイピングコース · 第5章 実務のスクレイピング · レッスン16

礼儀正しく取得する ― UA・間隔・エラー処理

ローカル実施

導入

第1章のマナーを、コードで実践します。待ち時間を入れる自分が誰か名乗る失敗に備えるの3点が柱です。

説明

import requests
import time

headers = {
    # 自分が誰か(連絡先など)を名乗る。相手が問い合わせできるようにする
    "User-Agent": "MyLearningBot/1.0 (contact: me@example.com)"
}

urls = ["https://example.com/page/1", "https://example.com/page/2"]

for url in urls:
    try:
        res = requests.get(url, headers=headers, timeout=10)
        res.raise_for_status()
        # ... ここで BeautifulSoup 解析 ...
        print("取得成功:", url)
    except requests.RequestException as e:
        print("取得失敗:", url, e)

    time.sleep(1)   # 次のアクセスまで1秒あける(サーバーへの負荷を下げる)
  • User-Agent … リクエストに付ける「自分の名札」。連絡先を入れておくと、相手のサイト運営者が問い合わせやすく、ブロックも避けやすくなります。
  • timeout=10 … 応答が10秒来なければ諦める。無反応のサイトで固まるのを防ぎます。
  • time.sleep(1) … アクセスの間に間隔をあける。これが最重要のマナーです。短時間の連打はサーバー攻撃と区別がつきません。
  • try / except … 一部のページで失敗しても、全体を止めずに続けられます。

やってみよう

time.sleep(1) の秒数は、相手サイトの規模や robots.txtCrawl-delay の指定に合わせて調整します。「速く終わらせる」より「相手に迷惑をかけない」を優先するのが、長くスクレイピングを続けるコツです。