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

Python使用requests库发送Post、Get请求序列拉取表单查询数据

实现方案

核心思路

使用requests.Session()维持跨请求的Cookie、会话状态,完全复现浏览器的请求时序即可,注意必须使用Session对象发送所有请求,才能自动保存服务端返回的Cookie、会话标识,否则不同请求之间状态不互通会导致获取数据失败。

具体实现步骤

步骤1:初始化会话并配置基础请求头

从Chrome的请求详情页复制浏览器的完整请求头,包括User-Agent、Accept、Referer等所有字段,避免被服务端识别为异常请求。示例代码:

import requests
import time

session = requests.Session()
# 替换为你从Chrome请求详情中复制的实际请求头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
    "Referer": "替换为表单页面的实际访问地址"
}
session.headers.update(headers)

步骤2:按排查到的时序依次发送请求

完全按照你拿到的5步请求顺序发送即可,各步骤注意事项如下:

  • 第一步带Form-Data的Post请求:直接把Chrome里复制的Form-Data键值对填到data参数即可
  • 无Form-Data的Post请求:data参数传空字典{}即可,保证请求地址、请求头和浏览器一致
  • 两次PNG的Get请求:直接请求对应地址即可,不需要处理返回内容,仅用于维持会话状态
  • 重复的第一步Post请求:和第一步参数完全一致再发一次
  • 最终Get请求:请求完成后即可拿到返回的表格数据,二进制Excel直接存为本地文件,HTML表格直接解析响应文本即可

示例代码框架:

# 1. 第一次带FormData的Post请求
form_data = {
    # 替换为Chrome里复制的实际FormData键值对
    "filter_region": "华东",
    "filter_date": "2024-01-01",
    "submit": "查询"
}
resp1 = session.post("替换为第一步的实际请求URL", data=form_data)
# 可选添加1秒延迟,模拟真实用户操作避免请求过快被拦截
time.sleep(1)
print(f"第一步请求状态码:{resp1.status_code}")

# 2. 无FormData的Post请求
resp2 = session.post("替换为第二步的实际请求URL", data={})
time.sleep(1)
print(f"第二步请求状态码:{resp2.status_code}")

# 3. 两次PNG的Get请求
resp3 = session.get("替换为第一张PNG的实际URL")
resp4 = session.get("替换为第二张PNG的实际URL")
time.sleep(1)
print(f"PNG请求状态码:{resp3.status_code}, {resp4.status_code}")

# 4. 重复第一步的Post请求
resp5 = session.post("替换为第一步的请求URL", data=form_data)
time.sleep(1)
print(f"第四步请求状态码:{resp5.status_code}")

# 5. 最终Get请求拿数据
final_resp = session.get("替换为第五步的实际请求URL")
print(f"最终请求状态码:{final_resp.status_code}")

# 处理返回结果
# 若为Excel二进制文件
if "excel" in final_resp.headers.get("Content-Type", "") or "spreadsheet" in final_resp.headers.get("Content-Type", ""):
    with open("查询结果.xlsx", "wb") as f:
        f.write(final_resp.content)
# 若为HTML格式表格
else:
    print(final_resp.text)

常见问题排查

  • 请求返回403:检查请求头是否和浏览器完全一致,尤其是Referer、Cookie字段,若存在动态csrf token,需要先从表单页面源码中提取对应值再填入FormData
  • 返回空数据:检查FormData的字段是否和浏览器提交的完全一致,有没有遗漏动态生成的隐藏字段
  • 时序错误导致拿不到数据:可以逐步增加每个请求之间的延迟到2-3秒,匹配真实用户的操作节奏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 18:27:04