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

港交所沪深港通月度历史数据提取失败,求有效解决方案

港交所沪深港通月度历史数据提取修正方案

你定位到的JS数据链接没问题,但问题出在文件格式上——它不是纯JSON,而是JavaScript变量赋值语句(开头是var data_tab_monthly_202302e = ,结尾是;),直接用json.loads解析会报错,因为不符合JSON语法规范。

修正步骤:

  1. 获取文件内容后,剥离变量定义的外壳,提取内部的纯JSON结构
  2. 对提取后的JSON字符串进行解析
  3. 按原逻辑整理成DataFrame

修正后的代码:

import pandas as pd
import urllib.request
import json

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

with urllib.request.urlopen(url) as r:
    # 读取并解码文件内容
    js_content = r.read().decode('utf-8')
    # 剥离JS变量定义,提取中间的JSON部分
    json_str = js_content.split('var data_tab_monthly_202302e = ')[1].rstrip(';')
    # 解析JSON数据
    data = json.loads(json_str)

# 后续数据整理逻辑和原代码一致
df = pd.DataFrame(data['tables'][0]['body'])
columns = [item['text'] for item in data['tables'][0]['header']]
row_count = max(df['row'])
new_df = pd.DataFrame(df.text.values.reshape((row_count, -1)), columns=columns)

# 查看提取结果
print(new_df.head())

补充说明:

如果要提取其他月份的数据,只需修改URL中的日期段(比如202302改成目标年月),同时调整split方法里的变量名(对应月份的变量格式为data_tab_monthly_YYYYMMe),确保剥离外壳的逻辑匹配即可。

内容的提问来源于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.28 19:32:46