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

Python如何爬取同一URL下的多页表格数据 以CCIL官网为例

同URL多页表格爬取的data参数获取方案

核心原理

你要爬取的CCIL站点用的是ASP.NET Web Form架构,这类站点的分页逻辑完全基于POST表单提交,不会在URL中携带分页参数,你说的data参数就是POST请求需要提交的表单字段集合。

data参数各字段的获取方式

  • 基础校验字段:__VIEWSTATE、__VIEWSTATEGENERATOR、__EVENTVALIDATION三个是ASP.NET的固定校验字段,每次页面刷新都会更新。你第一次用GET请求访问初始页时,直接用BeautifulSoup从返回HTML的<input type="hidden" name="对应字段名">标签中提取value值即可。
  • 分页触发字段:__EVENTTARGET是控制分页的核心参数,你可以打开浏览器F12开发者工具,切换到「网络」面板,点击第二页分页按钮,抓取发送给OMMWSG.aspx的POST请求,在请求的「表单数据」板块就能看到对应页码的__EVENTTARGET取值,所有页码的对应值都可以通过这个方式获取。

爬取逻辑说明

每次请求下一页之前,都需要先从上一页返回的HTML中重新提取三个基础校验字段的最新值,和对应页码的__EVENTTARGET一起组装成data参数,发起POST请求就能拿到对应分页的页面内容,再解析表格即可。

注意:该网站仅会在特定时间段展示对应数据,爬取前需确认目标数据处于开放展示时段,否则请求返回的页面不会包含目标表格。

简化实现代码示例

import requests
from bs4 import BeautifulSoup
import pandas as pd

target_url = "https://www.ccilindia.com/OMMWSG.aspx"
# 替换为你自己的浏览器UA,避免被拦截
req_headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
}

# 拉取初始页数据
page_resp = requests.get(target_url, headers=req_headers)
page_soup = BeautifulSoup(page_resp.text, "html.parser")
table_list = []

# 解析初始页表格,表格索引根据实际页面结构调整
init_table = pd.read_html(page_resp.text)[0]
table_list.append(init_table)

# 这里替换为你抓包拿到的所有分页对应的__EVENTTARGET值
page_event_list = [
    "gvOMMWSG$ctl28$lnkPage2",
    "gvOMMWSG$ctl28$lnkPage3",
    "gvOMMWSG$ctl28$lnkPage4"
]

for event_target_val in page_event_list:
    # 提取当前页最新的校验字段值
    viewstate_val = page_soup.find("input", {"name": "__VIEWSTATE"})["value"]
    viewstate_gen_val = page_soup.find("input", {"name": "__VIEWSTATEGENERATOR"})["value"]
    event_validation_val = page_soup.find("input", {"name": "__EVENTVALIDATION"})["value"]
    
    # 组装POST请求的data参数
    post_data = {
        "__VIEWSTATE": viewstate_val,
        "__VIEWSTATEGENERATOR": viewstate_gen_val,
        "__EVENTVALIDATION": event_validation_val,
        "__EVENTTARGET": event_target_val
    }
    
    # 请求下一页
    page_resp = requests.post(target_url, headers=req_headers, data=post_data)
    page_soup = BeautifulSoup(page_resp.text, "html.parser")
    current_table = pd.read_html(page_resp.text)[0]
    table_list.append(current_table)

# 合并全部分页表格数据
full_table = pd.concat(table_list, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:21:02