同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
相关产品推荐
相关产品推荐

