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

如何从HTML内嵌JSON中提取指定层级family.products.edges下的uri

别用正则解析JSON!用Python的json模块精准定位指定层级

正则处理嵌套的JSON结构真的是给自己挖坑——你永远不知道什么时候会遇到转义字符、嵌套层级变化或者格式小变动导致匹配失效。针对你的需求,用Python内置的json模块解析,再定位到指定层级提取URI才是靠谱的方案,具体步骤如下:


步骤1:清理并解析HTML中的JSON字符串

你拿到的是内嵌在HTML里的转义JSON(用"代替双引号),首先要把它转换成合法的JSON格式,再解析成Python字典:

import json

# 假设你的test变量是包含转义JSON的字符串
clean_json = test.replace('"', '"')
try:
    data = json.loads(clean_json)
except json.JSONDecodeError as e:
    print(f"JSON解析出错:{e}")
    exit()

步骤2:定位到family -> products -> edges层级提取URI

根据你描述的结构,我们遍历edges数组,提取符合条件的URI,并且只取前5条:

target_uris = []
# 逐层获取目标层级,用get()避免键不存在报错
products_edges = data.get("family", {}).get("products", {}).get("edges", [])

for edge in products_edges:
    # 注意:GraphQL的edges结构通常是{"node": {...}},如果你的结构直接在edge里有uri,改成edge.get("uri")即可
    product_uri = edge.get("node", {}).get("uri")
    
    # 过滤符合要求的URI:包含www.barrythrill.se且以.html结尾
    if product_uri and "www.barrythrill.se" in product_uri and product_uri.endswith(".html"):
        target_uris.append(product_uri)
        # 取够5条就停止循环
        if len(target_uris) == 5:
            break

# 输出结果
print(target_uris)

为什么不推荐正则?

  • JSON的嵌套结构、转义字符(比如字符串里的\")会让正则表达式变得异常复杂,很容易匹配到非目标层级的URI;
  • 如果JSON格式有微小变动(比如空格、键的顺序变化),正则就可能失效,而json模块完全不受这些格式细节影响;
  • 代码可读性和可维护性远高于冗长的正则表达式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 20:47:48