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

Python Requests无法获取目标表格数据的爬虫问题排查

问题排查与解决方法

核心问题分析

你遇到的情况是登录成功但拿不到目标数据,大概率是请求的参数、格式或请求头不符合网站要求,以下是具体的排查和修复方向:

1. 登录请求的参数传递错误

你的登录POST请求用了params=parameters,但表单数据应该放在请求体里,用data=parameters。params是把参数拼在URL末尾,而网站的登录接口大概率是接收请求体里的表单数据,这会导致登录可能没真正成功,或者后续会话状态异常。

修复代码:

# 把params改成data
r = session.post(url, data=parameters, headers=headers)

2. 获取表格的POST请求参数缺失

你后续的POST请求里parameters = {parameter:parameter,}是无效的空参数(parameter变量甚至未定义),网页端的POST请求肯定携带了获取表格所需的关键参数(比如分页参数、筛选条件、表格标识等),你需要:

  • 打开浏览器开发者工具(F12),切换到网络标签,找到网页端获取表格的POST请求
  • 复制该请求的Form Data或Payload里的所有参数,完整写到你的parameters里

3. 请求头不完整

网页端的POST请求通常会携带更多必要的请求头,比如:

  • Content-Type:表单提交一般是application/x-www-form-urlencoded,JSON格式则是application/json
  • Referer:告诉服务器请求来自哪个页面,很多网站会校验这个
  • X-Requested-With:标识是AJAX请求,部分网站只响应AJAX请求

你需要把浏览器里该POST请求的所有请求头(除了自动携带的Cookie、Host等)都加到你的headers里。

4. 后续请求未携带新的验证Token

有些网站不仅登录需要__RequestVerificationToken,后续的POST请求也需要重新获取页面里的Token。你需要在发送获取表格的POST请求前,先访问表格所在页面,解析页面里的__RequestVerificationToken,并加到POST参数里。

5. 重复GET请求无意义

代码里连续两次session.get(url)是多余的,登录后应该直接跳转到表格页面,或者获取表格页面内容来拿Token,没必要重复请求同一个URL。

修复后的核心代码示例

# 登录部分修复
r = session.post(url, data=parameters, headers=headers)

# 跳转到表格页面(假设表格页面地址是table_url)
table_page = session.get(table_url)
# 重新获取页面里的验证Token
new_token = BeautifulSoup(table_page.text, 'html.parser').find(attrs={'name':'__RequestVerificationToken'}).attrs['value']

# 准备获取表格的真实参数(从浏览器开发者工具复制)
table_params = {
    "__RequestVerificationToken": new_token,
    "page": "1",
    "pageSize": "10",
    # 补充其他从浏览器复制的参数
}

# 完善请求头
table_headers = headers.copy()
table_headers['Content-Type'] = 'application/x-www-form-urlencoded'
table_headers['Referer'] = table_url

# 发送获取表格的POST请求
r = session.post(table_api_url, data=table_params, headers=table_headers)

# 查看响应内容
print(r.text)

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

相关产品推荐
方舟 Agent Plan

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

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