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

港交所JSON转DataFrame遇问题,仅需提取style 1数据

港交所JSON数据提取与转换问题解决

问题描述

从港交所指定网页提取JSON数据的代码如下:

import pandas as pd
import requests
import json

url = r'https://www.hkex.com.hk/eng/csm/MonthlyStat/data_tab_monthly_202302e.js?_=1'

response = requests.get(url)
if response.status_code != 200:
    exit(1)

text = response.text[response.text.index('=') + 1:]
data = json.loads(text)

尝试用df = pd.json_normalize(data, max_level=2)转换为DataFrame时,调整max_level参数无效果,且仅需提取所有id下的style 1数据,作为JSON新手不确定正确处理方式。

解决方案

这个JSON的结构是嵌套字典集合,每个顶层元素包含id和对应嵌套数据,style 1数据藏在每个条目的子层级里。直接用json_normalize无法精准筛选目标内容,需要先遍历提取再转换:

import pandas as pd
import requests
import json

url = r'https://www.hkex.com.hk/eng/csm/MonthlyStat/data_tab_monthly_202302e.js?_=1'

response = requests.get(url)
if response.status_code != 200:
    exit(1)

text = response.text[response.text.index('=') + 1:]
data = json.loads(text)

# 提取所有id下的style 1数据
target_data = []
for item in data:
    item_id = item.get('id')
    # 筛选出当前条目里style为1的数据块
    style_1_block = next((d for d in item.get('data', []) if d.get('style') == 1), None)
    if style_1_block:
        # 把id和目标数据合并,方便转DataFrame
        style_1_block['id'] = item_id
        target_data.append(style_1_block)

# 转换为DataFrame
df = pd.DataFrame(target_data)
print(df.head())

代码说明

  • 遍历data中的每个条目,通过item.get('id')获取条目标识
  • 用生成器表达式快速定位style等于1的数据块
  • 将id并入目标数据块,收集所有符合条件的数据后转为DataFrame

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 23:05:02