導入
第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.txt の Crawl-delay の指定に合わせて調整します。「速く終わらせる」より「相手に迷惑をかけない」を優先するのが、長くスクレイピングを続けるコツです。