Python脚本爬取分页HTML表格异常:点击下一页仍导出首10条数据
问题解决:动态加载表格的抓取与导出
问题根源
你当前的代码仅用BeautifulSoup解析了页面初始加载的静态HTML,而网页的“加载下10条”功能是通过JavaScript动态请求数据并渲染到页面中的。初始HTML里只有前10条记录,后续数据是点击按钮后才加载到DOM中的——哪怕你手动触发了加载按钮,只要脚本没重新获取更新后的页面内容,解析的还是最初的那10条数据。
解决方案:用Selenium模拟浏览器动态操作
要抓取动态加载的内容,需要用能模拟真实浏览器行为的工具(比如Selenium),它可以帮你点击加载按钮、等待新数据渲染完成,再抓取完整的表格内容。
步骤与代码示例
- 先安装依赖:
pip install selenium pandas
同时下载对应浏览器的驱动(比如Chrome浏览器的ChromeDriver),确保驱动版本和浏览器版本匹配。
- 修改后的抓取脚本:
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 import pandas as pd # 初始化浏览器(这里以Chrome为例,需确保ChromeDriver路径正确) driver = webdriver.Chrome() driver.get("你的目标网页URL") try: # 循环点击加载按钮,直到按钮消失或无法点击(根据实际页面调整选择器) while True: try: # 等待加载按钮出现,然后点击 load_button = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, "加载按钮的ID")) ) load_button.click() # 等待新数据加载完成(这里以表格行数变化为判断条件,可根据实际调整) current_row_count = len(driver.find_elements(By.CSS_SELECTOR, "#pageLayout_projectTeamMembersGridView_gridView tr")) WebDriverWait(driver, 10).until( lambda d: len(d.find_elements(By.CSS_SELECTOR, "#pageLayout_projectTeamMembersGridView_gridView tr")) > current_row_count ) except: # 没有更多数据可加载时退出循环 break # 获取更新后的页面HTML,解析表格 soup = BeautifulSoup(driver.page_source, 'html.parser') table1 = soup.find('table', id='pageLayout_projectTeamMembersGridView_gridView') # 提取表头 headers = [th.text.strip() for th in table1.find_all('th')] df = pd.DataFrame(columns=headers) # 提取所有行数据 for row in table1.find_all('tr')[1:]: row_data = [td.text.strip() for td in row.find_all('td')] if row_data: # 跳过空行 df.loc[len(df)] = row_data # 导出CSV df.to_csv('Export.csv', index=False) print("数据导出完成") finally: # 关闭浏览器 driver.quit()
关键注意点
- 替换代码中的
"你的目标网页URL"和"加载按钮的ID"为页面实际的URL和按钮ID(可通过浏览器开发者工具查看按钮的ID或其他选择器)。 - 等待条件可根据页面实际情况调整:比如有的页面加载新数据时会有加载动画,可改为等待加载动画消失;或者直接固定等待几秒(不推荐,不如智能等待可靠)。
- 如果加载按钮是通过其他元素触发(比如class选择器),把
By.ID换成By.CLASS_NAME或By.CSS_SELECTOR即可。
内容的提问来源于stack exchange,提问作者Herve
相关产品推荐
相关产品推荐

