You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助:如何使用正则表达式从HTML源码提取JSON数据并转为Python字典

解决从HTML源码中提取嵌入JSON并转为Python字典的问题

你已经找对了正则模式,接下来只需要把正则和文本内容结合,再解析成字典就行。我帮你完善了脚本,加上了关键的匹配和解析步骤,还做了健壮性处理:

import requests
import json
import re

url = 'https://www.dunelm.com/product/caldonia-check-natural-eyelet-curtains-1000187301?defaultSkuId=30729125'
r = requests.get(url)
r.encoding = 'utf-8'  # 确保中文等特殊字符编码正确

# 推荐用requests返回的原始HTML文本(避免BeautifulSoup修改源码结构导致正则失效)
html_content = r.text

# 如果你想用之前保存的sourcecode.html文件,就注释掉上面一行,打开下面的代码
# with open("sourcecode.html", "r", encoding='utf-8') as file:
#     html_content = file.read()

# 正则匹配目标JSON,注意加上re.DOTALL让.匹配换行符(JSON可能跨多行)
regex_pattern = r'{"delivery".*false}}}'
match_result = re.search(regex_pattern, html_content, re.DOTALL)

if match_result:
    # 提取匹配到的JSON字符串
    target_json_str = match_result.group()
    try:
        # 把JSON字符串转为Python字典
        data_dict = json.loads(target_json_str)
        print("提取并解析成功!格式化后的数据:")
        print(json.dumps(data_dict, indent=2, ensure_ascii=False))
        # 现在你可以像操作普通字典一样访问数据,比如 print(data_dict['delivery'])
    except json.JSONDecodeError as error:
        print(f"JSON解析失败,错误信息:{error}")
else:
    print("没有找到匹配的JSON数据,请检查正则表达式或HTML内容")

几个关键说明:

  • 为什么用re.DOTALL 你的目标JSON很可能是跨多行的,默认正则里的.不会匹配换行符,加上这个标志才能捕获完整的JSON块。
  • 为什么优先用r.text而不是str(soup) BeautifulSoup在解析HTML时会自动调整标签结构、转义部分字符,可能会破坏原本能匹配的正则规则,直接用请求返回的原始文本更可靠。
  • 异常处理的作用? 万一正则匹配到的内容不是合法JSON,或者没找到匹配,脚本不会直接崩溃,还能给出明确的错误提示。

你可以直接运行这个脚本,就能得到想要的Python字典了。

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

火山引擎 最新活动