導入
一覧が何ページにも分かれているサイトはよくあります。「次のページ」を辿って全件を集める ページネーション(クローリング) の考え方を押さえましょう。
説明
URL に規則性がある場合(?page=1, ?page=2, …)は、番号を変えながらループします。
import requests
from bs4 import BeautifulSoup
import time
all_items = []
for page in range(1, 6): # 1〜5ページ
url = f"https://example.com/list?page={page}"
res = requests.get(url, timeout=10)
res.raise_for_status()
soup = BeautifulSoup(res.text, "html.parser")
items = soup.select(".item")
if not items:
break # 項目が無くなったら終了(最終ページを超えた)
for it in items:
all_items.append(it.find(class_="name").text)
time.sleep(1) # 各ページの間隔をあける
print("集めた件数:", len(all_items))
range(1, 6)でページ番号を回し、URLに埋め込みます。if not items: break… その回で項目が取れなくなったら、最終ページを越えたと判断して止めます。ページ数を決め打ちしないための安全弁です。- 各ページの間にも必ず
time.sleepを入れます。
「次へ」リンクの href を辿る形式のサイトでは、毎回ページ内の <a class="next"> の URL を取得して、それが無くなるまで繰り返す、という書き方をします。
やってみよう
いきなり全ページを回さず、まず range(1, 2)(1ページだけ)で試して、狙ったデータが取れるか確認してから件数を増やすのが安全です。少しずつ広げるのがクローリングの鉄則です。