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

如何从bs4获取的window.__INITIAL_STATE__中提取id和name生成字典

提取页面中groups数据的解决方案

实现步骤

要提取window.__INITIAL_STATE__里的groups.data["100"]数据并生成{id:name}格式的字典,需要先把JS对象转换为Python可处理的结构,具体操作如下:

  1. 提取JS对象字符串:从script标签文本中匹配出window.__INITIAL_STATE__对应的JSON结构内容
  2. 转换为Python字典:用json模块将提取到的字符串解析为Python字典
  3. 生成目标字典:遍历指定路径下的元素,提取id和name字段组成新字典

完整代码

import requests
from bs4 import BeautifulSoup
import re
import json

url = "https://ruz.spbstu.ru/faculty/100/groups"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
scripts = soup.find_all('script')

# 提取window.__INITIAL_STATE__对应的内容
script_content = scripts[3].text
match = re.search(r'window.__INITIAL_STATE__ = (.*?);', script_content, re.DOTALL)
if match:
    initial_state_str = match.group(1)
    # 解析为Python字典
    initial_state = json.loads(initial_state_str)
    # 提取groups.data["100"]下的元素
    groups_data = initial_state['groups']['data']['100']
    # 生成{id:name}字典
    result_dict = {item['id']: item['name'] for item in groups_data}
    print(result_dict)
else:
    print("未找到window.__INITIAL_STATE__对象")

关键说明

  • 正则表达式r'window.__INITIAL_STATE__ = (.*?);'中的re.DOTALL参数允许.匹配换行符,确保能捕获完整的JS对象内容
  • 若页面结构变化导致script标签索引不是3,需调整scripts[3]的索引值
  • 若出现JSON解析错误,可检查提取的字符串是否有JS特有的语法(如undefined),必要时用字符串替换处理后再解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:50:29