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

同URL多页面数据爬取异常:重复获取首页数据求助

解决动态分页数据爬取问题

你的问题出在网站分页是前端动态渲染,URL不会随页面切换改变,而且代码里错误地用requests请求拼接的URL,还注释了Selenium的页面跳转逻辑,导致始终获取第一页数据。

修正思路:

  • 放弃拼接URL的方式,直接用Selenium模拟点击「下一页」按钮
  • 精准定位下一页按钮(区分「上一页」和「下一页」,避免定位错误)
  • 每次点击后等待页面加载完成,再提取新页面的数据
  • 循环直到下一页按钮不可点击(出现disabled类)

修改后的代码:

import time
import pandas as pd
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
from bs4 import BeautifulSoup

# 创建年份列表(保留你原代码的逻辑)
years = list(range(1213, 2122, 101))

# 初始化浏览器
driver = webdriver.Chrome("C:/Users/aldi/Downloads/chromedriver.exe")
driver.get('https://www.fplanalytics.com/history1213.html')
driver.maximize_window()

# 初始化DataFrame
columns_names = ["player","team","position", "minutes", "goals", "assists", "cs", "tot pts", "bonus"]
df = pd.DataFrame(columns=columns_names)

while True:
    # 解析当前页面数据
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    table = soup.find('table', {'id':'data-table'})
    trs = table.find_all('tr')[1:]  # 跳过表头
    
    for row in trs:
        row_data = [td.text.strip() for td in row.find_all('td')]
        df.loc[len(df)] = row_data
    
    try:
        # 定位下一页按钮(通过aria-label精准匹配)
        next_btn = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.CSS_SELECTOR, 'a.page-link[aria-label="Next"]'))
        )
        # 检查按钮是否被禁用,禁用则停止循环
        if 'disabled' in next_btn.get_attribute('class'):
            break
        # 点击下一页
        next_btn.click()
        # 等待表格数据刷新
        time.sleep(2)
    except:
        # 找不到下一页按钮时退出循环
        break

# 关闭浏览器
driver.quit()

# 输出结果
print(df)

关键说明:

  • 用WebDriverWait替代硬等待,更可靠地等待元素加载完成
  • 通过aria-label="Next"精准定位下一页按钮,避免误点其他分页按钮
  • 检查按钮的disabled属性,判断是否到达最后一页
  • 全程用Selenium操作浏览器,确保获取的是动态加载后的最新页面数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:39:39