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

Python正则匹配后无法提取JSON数据 仅返回SRE_Match对象求解

问题原因

你当前代码返回<_sre.SRE_Match object at 0x7f3b92110988>是两个问题导致的:

  1. re.search()匹配成功时默认返回匹配对象实例,而非匹配到的具体文本,要获取匹配内容需要调用该对象的.group()方法。
  2. 你写的正则仅匹配了Total Cash Dividends Paid这串固定文本,没有覆盖该字段对应的日期、数值数据段,就算调用.group()也只能拿到字段名本身,拿不到后面的结构化数据。
可行解决方案

直接解析fusion-metadata标签内的结构化JSON数据,比纯正则匹配稳定性更高,完整可运行代码如下:

import requests
import json
from lxml import html

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) '
                  'AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9'
}
# 请求目标页面
resp = requests.get(
    'https://www.reuters.com/markets/companies/ASJT.JK/financials/income-annual',
    headers=headers
)
tree = html.fromstring(resp.content)
# 提取fusion-metadata内的JSON文本
metadata_text = tree.xpath('//*[@id="fusion-metadata"]/text()')[0]
# 解析为Python字典
metadata = json.loads(metadata_text)

annual_data = []
interim_data = []

# 遍历财务指标节点,定位目标字段
for section in metadata['fusion']['components']['root']['children']:
    section_props = section.get('props', {})
    if 'financials' in section_props.get('data', {}):
        fin_data = section_props['data']['financials']
        # 匹配Total Cash Dividends Paid指标
        for metric in fin_data['income']:
            if metric.get('label') == 'Total Cash Dividends Paid':
                # 提取年度数据
                for point in metric.get('annual', []):
                    annual_data.append({
                        "date": point['date'],
                        "value": f"{point['value']:.6f}"
                    })
                # 提取季度/中期数据
                for point in metric.get('interim', []):
                    interim_data.append({
                        "date": point['date'],
                        "value": f"{point['value']:.6f}"
                    })
                break

# 输出结果
print(annual_data)
print(interim_data)
方案原理
  • 路透社该财务页面的所有报表数据都预加载在id为fusion-metadata的脚本标签中,存储格式为标准JSON,不需要通过正则逐段抠取文本,直接用json.loads()反序列化为Python字典后按数据层级取值即可,抗页面结构变动的能力远强于纯正则方案。
  • 目标字段Total Cash Dividends Paid对应的年度、季度/中期数据分别存储在该指标节点的annual和interim键下,每个数据点都自带标准化的date(日期)和value(数值)字段,直接遍历取值后按要求格式化浮点数到6位小数,就能得到你预期的输出结构。
  • 该方案不需要写复杂的长正则匹配规则,后续如果要提取其他财务指标,只需要修改判断label的条件即可,扩展成本很低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:18:24