如何解析JSON对象中的HTML内容并提取指定信息?
解析含HTML的JSON并提取指定信息
核心思路
先从JSON对象中提取出HTML字符串,再用专业的HTML解析库(而非正则表达式)定位目标内容,避免因HTML结构微调导致解析失效。以下以Python为例,用BeautifulSoup实现提取:
步骤与代码
- 导入依赖库
from bs4 import BeautifulSoup import html # 若HTML字符串含转义字符(如<),需用此模块还原
- 从JSON提取并处理HTML
假设你的JSON对象结构为{"html_content": "待解析的HTML字符串"},先取出HTML内容并还原转义字符:
# 示例JSON对象 json_data = { "html_content": "<span style="color:#800000">protected</span></div></div><div><div><span style="font-weight:bold;font-size:150%">wummie</span><br /><span style="font-size:105%">Independent Faction</span><br /><span style="font-style:italic;font-size:110%">woman</span><br /><br /><span style="font-weight:bold">SlowlyWastingAway:</span> Deusphage<br /><br /><span style="font-weight:bold">Member Count:</span> 1<br /><span style="font-weight:bold">Age:</span> 2 years, 5 months and 6 days<br /><span style="font-weight:bold">Bank:</span> 0 Regals<br /><br /><span style="font-weight:bold">Flags:</span><br /><span style="color:#800000">open</span> | <span style="color:#800000">monsters</span> | <span style="color:#008000">animals</span><br />" } # 提取HTML并还原转义字符 html_str = json_data["html_content"] html_content = html.unescape(html_str)
- 解析HTML并提取目标信息
# 初始化解析器 soup = BeautifulSoup(html_content, "html.parser") # 提取基础信息 name = soup.find("span", style="font-weight:bold;font-size:150%").get_text(strip=True) faction = soup.find("span", style="font-size:105%").get_text(strip=True) gender = soup.find("span", style="font-style:italic;font-size:110%").get_text(strip=True) # 提取角色关联信息 role_label = soup.find("span", text="SlowlyWastingAway:") role_info = f"{role_label.get_text(strip=True)} {role_label.next_sibling.strip()}" # 提取统计信息 member_count = f"{soup.find('span', text='Member Count:').get_text(strip=True)} {soup.find('span', text='Member Count:').next_sibling.strip()}" age = f"{soup.find('span', text='Age:').get_text(strip=True)} {soup.find('span', text='Age:').next_sibling.strip()}" bank = f"{soup.find('span', text='Bank:').get_text(strip=True)} {soup.find('span', text='Bank:').next_sibling.strip()}" # 提取旗帜信息 flags_label = soup.find("span", text="Flags:") flags_list = [span.get_text(strip=True) for span in flags_label.find_next_siblings("span")] flags_info = f"{flags_label.get_text(strip=True)}\n{' | '.join(flags_list)}"
- 按要求格式输出
# 组合并打印结果 result = f"""{name} {faction} {gender} {role_info} {member_count} {age} {bank} {flags_info}""" print(result)
输出结果
wummie Independent Faction woman SlowlyWastingAway: Deusphage Member Count: 1 Age: 2 years, 5 months and 6 days Bank: 0 Regals Flags: open | monsters | animals
内容的提问来源于stack exchange,提问作者user19530601
相关产品推荐
相关产品推荐

