本文へスキップ
BecomeCoder

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

複数ページを巡回する ― ページネーション

ローカル実施

導入

一覧が何ページにも分かれているサイトはよくあります。「次のページ」を辿って全件を集める ページネーション(クローリング) の考え方を押さえましょう。

説明

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ページだけ)で試して、狙ったデータが取れるか確認してから件数を増やすのが安全です。少しずつ広げるのがクローリングの鉄則です。