You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python网页抓取中BeautifulSoup配合Selenium处理无URL变化的分页问题

动态分页场景下的多页数据抓取实现方法

针对分页不更新URL的单页应用场景,可采用以下两种可行方案实现全量分页数据抓取:

方案1:Selenium模拟点击分页(新手友好,适配现有技术栈)

该方案无需额外分析网站底层请求逻辑,直接模拟用户操作即可完成数据抓取,适合对接口分析不熟悉的新手:

  • 初始化Selenium驱动打开目标页面,先完成第一页表格数据的提取,可直接复用你已经写好的bs4解析逻辑
  • 定位分页区域的下一页按钮,推荐使用find_element()方法通过CSS选择器或XPath匹配,同时配合显性等待逻辑避免元素未加载导致的点击失败
  • 编写循环逻辑:每次点击下一页后,等待表格内容完成更新(可通过判断当前页表格首行内容与上一页是否不同实现,或直接用WebDriverWait监听表格元素重载),再提取当前页数据追加到总数据集
  • 循环终止条件:检测到下一页按钮变为不可点击状态(通常表现为元素class属性新增disabled字段、aria-disabled属性为true、透明度降低等特征)即可退出循环

示例参考代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化驱动
driver = webdriver.Chrome()
driver.get("https://olympics.com/tokyo-2020/olympic-games/en/results/all-sports/medalists.htm")
wait = WebDriverWait(driver, 10)
total_data = []

# 此处替换为你已实现的单页数据提取逻辑
def extract_current_page():
    page_html = driver.page_source
    # 用bs4解析page_html提取表格数据
    # return 提取到的当前页数据列表

# 先提取第一页数据
total_data.extend(extract_current_page())

while True:
    try:
        # 匹配下一页按钮,选择器可根据页面实际结构调整
        next_btn = wait.until(EC.element_to_be_clickable((By.XPATH, "//li[contains(@class, 'pagination-next')]/a")))
        # 判断下一页是否不可点击
        if next_btn.get_attribute("aria-disabled") == "true" or "disabled" in next_btn.get_attribute("class"):
            break
        next_btn.click()
        # 等待表格加载完成,可替换为更精准的内容校验逻辑
        wait.until(lambda d: d.find_element(By.TAG_NAME, "tbody").text != "")
        total_data.extend(extract_current_page())
    except Exception as e:
        break

driver.quit()

使用注意:

  • 控制点击频率,避免短时间高频请求触发网站反爬限制
  • 若分页按钮不在可视区域,可先执行JS滚动到分页区域再进行点击操作

方案2:抓取后端异步接口(效率更高,资源消耗更低)

分页不更新URL的本质是前端点击后发送异步请求拉取分页数据,直接抓取接口性能远高于模拟浏览器操作:

  • 打开浏览器F12开发者工具,切换到「网络」面板,筛选「Fetch/XHR」类型请求
  • 点击页面下一页按钮,查看网络面板新增的请求,请求参数中通常会携带page、pageNo、offset等分页标识字段
  • 分析接口的请求头、请求参数、返回格式,直接用requests库循环修改分页参数发起请求即可拿到全量数据,接口返回一般为JSON格式,解析成本比HTML更低

使用注意:

  • 部分接口会携带鉴权参数,请求时需要和浏览器发起的请求头保持一致才能正常获取数据
  • 可先单独测试单页接口的可访问性,验证通过后再编写循环逻辑

内容的提问来源于stack exchange,提问作者Shiva Govindaswamy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:30:04