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

无法抓取JS动态生成的多页网页表格数据,请求技术支援

问题:动态加载多页表格抓取失败,导出空CSV文件

尝试抓取https://admissions.nic.in/admiss/admissions/orcrjacd/105012321的JavaScript动态生成多页表格数据,使用Selenium+ChromeDriver编写代码后,仅导出含“S.No.”的空文件;抓包方法在此网址也失效,无法获取有效数据。


问题根源

  1. 原代码仅等待表格元素存在,但表格可能已渲染但数据未加载完成,或页面存在多个无关表格(比如空表头表格),导致抓取了错误的表格。
  2. 未处理分页逻辑,仅抓取了初始页面(甚至是空状态)的内容,没有遍历所有分页数据。

修正后的解决方案代码

from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
from selenium.common.exceptions import TimeoutException, ElementClickInterceptedException

def scrape_table(url):
    service = Service('chromedriver.exe')  # 确保路径与本地ChromeDriver一致
    driver = webdriver.Chrome(service=service)
    driver.get(url)
    dfs = []
    
    while True:
        try:
            # 等待表格数据行加载(定位非表头的有效数据行)
            WebDriverWait(driver, 30).until(
                EC.presence_of_element_located((By.XPATH, "//table//tr[td and not(contains(@style, 'background-color:#ccc'))]"))
            )
            # 精准定位目标数据表格,避免抓取无关表格
            target_table = driver.find_element(By.XPATH, "//table[contains(@border, '1') and .//td[text()='S.No.']]/following-sibling::table")
            df = pd.read_html(target_table.get_attribute('outerHTML'))[0]
            dfs.append(df)
            
            # 点击下一页按钮,处理可能的遮挡问题
            next_btn = WebDriverWait(driver, 10).until(
                EC.element_to_be_clickable((By.XPATH, "//a[text()='Next']"))
            )
            driver.execute_script("arguments[0].click();", next_btn)
        except (TimeoutException, ElementClickInterceptedException):
            # 无下一页或无法点击时终止循环
            break
    
    driver.quit()
    return pd.concat(dfs, ignore_index=True)

def export_to_csv(df, filename):
    df.to_csv(filename, index=False)

def scrape_and_export(url, filename):
    df = scrape_table(url)
    export_to_csv(df, filename)
    print(f"数据已导出到 {filename}")

# 执行抓取
url = 'https://admissions.nic.in/admiss/admissions/orcrjacd/105012321'
filename = 'output.csv'
scrape_and_export(url, filename)

核心改进点

  • 等待逻辑优化:不再仅等待表格元素,而是等待表格内的有效数据行出现,确保数据已完全加载。
  • 精准表格定位:通过XPath定位真实数据表格,避免抓取页面上的空表头或其他无关表格。
  • 分页自动遍历:循环点击下一页按钮,直到无法点击为止,实现多页数据的完整抓取。
  • 异常容错处理:捕获超时、点击拦截等异常,避免程序崩溃,同时判断分页结束条件。

额外注意事项

  • 确保ChromeDriver版本与本地Chrome浏览器版本严格匹配,否则会出现加载异常。
  • 若网站存在反爬限制,可在分页点击后添加time.sleep(2)的短暂等待,避免触发频率限制。
  • 抓包方法失效通常是因为网站使用了会话验证或加密请求,Selenium模拟真实浏览器行为是更可靠的解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:20:32