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

如何用requests.post结合BeautifulSoup抓取无URL变化的子页面?

搞定表单POST参数构造问题

我明白你的问题了——这个页面用表单提交切换内容但不改变URL,所以必须精准构造POST参数才能拿到"OTHER INFORMATION"的内容。核心是要先从初始页面抓取服务器生成的隐藏字段,再加上触发目标页面的关键参数statview=2。

接下来一步步来:

第一步:先抓初始页面的表单基础参数

首先得发GET请求到目标页面,把form1_2date里的隐藏字段、默认值都捞出来,尤其是keyf这种服务器生成的验证字段,不带它的话POST请求大概率会被拒绝。用requests.Session还能自动帮你管理Cookie,避免会话不一致的问题:

import requests
from bs4 import BeautifulSoup

url = 'https://www.mmorpg-stat.eu/0_fiche_alliance.php?pays=5&ftr=500208.all&univers=_146'

# 初始化会话,自动保持Cookie
session = requests.Session()
initial_response = session.get(url)
soup = BeautifulSoup(initial_response.text, 'html.parser')

# 定位到目标表单form1_2date
form = soup.find('form', {'name': 'form1_2date'})

# 提取表单里的有效参数
form_data = {}
for input_tag in form.find_all('input'):
    name_attr = input_tag.get('name')
    value_attr = input_tag.get('value', '')
    
    # 跳过无name属性的字段,以及仅用于触发提交的button按钮(不属于表单提交数据)
    if not name_attr or input_tag.get('type') == 'button':
        continue
    
    # 未勾选的复选框不需要传入参数
    if input_tag.get('type') == 'checkbox' and not input_tag.get('checked'):
        continue
    
    form_data[name_attr] = value_attr

# 关键操作:根据按钮的onclick逻辑,将statview设为2,这是切换到"OTHER INFORMATION"页面的标识
form_data['statview'] = '2'

第二步:发送POST请求获取目标页面

现在用构造好的参数发POST请求,就能拿到你要的子页面内容了:

# 发送POST请求
target_response = session.post(url, data=form_data)

# 解析页面内容,提取你需要的信息
target_soup = BeautifulSoup(target_response.text, 'html.parser')
# 这里就可以处理"OTHER INFORMATION"区域的内容了

为什么这么构造参数?我给你拆解下表单字段:

  • keyf:隐藏字段,服务器用来验证请求合法性的凭证,必须从初始页面实时获取,不能硬编码。
  • zoomgraph_box:复选框,默认未勾选,所以无需传入参数。
  • date_1/date_2:日期字段,直接使用页面默认值即可;如果需要自定义日期,修改form_data里的对应值即可(注意格式要和页面一致,比如DD-MM-YYYY)。
  • plot_1:隐藏字段,初始值为空,无需修改。
  • statview:核心参数!按钮点击时会将其设为2,对应"OTHER INFORMATION"页面;值0和1则对应另外两个页面。
  • statview_bis:隐藏字段,保留初始值即可。
  • 各类Submit按钮:都是type="button",仅用于触发提交的交互元素,不属于表单提交数据,所以不用放进POST参数里。

额外提醒

  • 务必使用requests.Session():网站可能通过Cookie跟踪会话,不用Session的话,POST请求可能会被判定为非法请求。
  • 不要硬编码隐藏字段值:比如keyf这类字段可能会随会话变化,每次请求都从初始页面抓取才是可靠的做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:26:43