如何用requests抓取ASPX页面?提交按钮及VIEWSTATE问题
抓取ASPX页面数据的解决方案
一、找到提交按钮名称的正确方法
你当前的按钮字段为空,是因为ASPX的提交按钮名称不会直接在动态DOM里暴露,或者你没找对位置。可以通过两种方式获取:
- 查看页面原始源码:右键页面→查看页面源代码,搜索关键词
Consultar,找到对应的提交按钮元素,比如<input type="submit" name="btnConsultar" value="Consultar" />,这里的btnConsultar就是按钮的name属性,POST时要写成'btnConsultar': 'Consultar'。 - 监控网络请求:打开浏览器开发者工具(F12)→切换到Network标签,手动点击页面上的"Consultar"按钮,找到POST请求后查看Form Data部分,里面会列出所有提交的参数,包括按钮的name和value。
二、ASPX页面必须处理的隐藏参数
ASPX页面依赖服务器生成的几个核心隐藏字段,只靠基础POST请求必然失败,必须先GET页面获取这些参数再一起提交:
__VIEWSTATE:页面状态标识__VIEWSTATEGENERATOR:状态生成器标识__EVENTVALIDATION:事件验证标识
三、修正后的代码示例
用requests+BeautifulSoup实现完整抓取流程:
import csv import requests from bs4 import BeautifulSoup # 用Session保持会话,维持ASPX所需的状态 session = requests.Session() target_url = 'http://clima.edu.ar/InformePorPeriodo.aspx' # 第一步:GET页面,提取隐藏参数 get_response = session.get(target_url) soup = BeautifulSoup(get_response.text, 'html.parser') viewstate = soup.find('input', {'name': '__VIEWSTATE'})['value'] viewstategenerator = soup.find('input', {'name': '__VIEWSTATEGENERATOR'})['value'] eventvalidation = soup.find('input', {'name': '__EVENTVALIDATION'})['value'] # 第二步:构造完整表单数据,包含隐藏参数和业务参数 form_data = { '__VIEWSTATE': viewstate, '__VIEWSTATEGENERATOR': viewstategenerator, '__EVENTVALIDATION': eventvalidation, 'CalendarioDesde': '01/11/2022', 'CalendarioHasta': '28/12/2022', 'IdEstacion': 'Aeropuerto San Luis (REM)', 'btnConsultar': 'Consultar' # 替换为你找到的按钮name属性值 } # 第三步:提交POST请求 post_response = session.post(target_url, data=form_data) # 处理CSV格式的响应 csv_reader = csv.reader(post_response.text.splitlines()) for row in csv_reader: print(row)
四、关键注意事项
- 必须用
Session对象保持会话,ASPX会依赖Cookie维持状态一致性。 - 隐藏字段每次请求可能更新,所以每次POST前都要重新GET页面获取最新值。
- 如果页面还有其他动态参数(比如
__EVENTTARGET),同样需要从GET的页面源码中提取并加入表单数据。
内容的提问来源于stack exchange,提问作者matsuo_basho
相关产品推荐
相关产品推荐

