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

BS4解析含特殊字符HTML:房产网站数据转pandas DF求助

解析带转义字符的内嵌JSON属性并转为pandas DataFrame

1. 格式识别

你遇到的是HTML自定义属性中存储的转义JSON字符串——为了避免JSON的双引号、反斜杠和HTML属性的引号冲突,这类内容会把特殊字符做HTML转义(比如"转成",\转成\\),最终呈现为单行的转义文本。

2. 完整解决方案

假设你已经用BeautifulSoup完成了HTML解析,以下是具体实现步骤:

步骤1:提取属性值并反转义

先用BeautifulSoup拿到data-listing的原始值,再用Python的html模块还原成标准JSON字符串:

from bs4 import BeautifulSoup
import html
import json
import pandas as pd

# 示例HTML片段(或你已解析的soup对象)
html_content = '<div data-listing="{&quot;id&quot;:123,&quot;price&quot;:250000,&quot;area&quot;:85,&quot;rooms&quot;:3}"></div>'
soup = BeautifulSoup(html_content, 'html.parser')

# 提取带转义的属性值
escaped_json_str = soup.find('div')['data-listing']
# 反转义得到标准JSON格式
raw_json_str = html.unescape(escaped_json_str)

步骤2:解析JSON为Python数据结构

用json.loads()将处理后的字符串转成字典或列表:

# 单条数据会得到字典,多条数据则是列表
listing_data = json.loads(raw_json_str)

步骤3:转换为pandas DataFrame

根据数据结构直接转换:

  • 单条字典数据:
df = pd.DataFrame([listing_data])
  • 多条数据组成的列表:
df = pd.DataFrame(listing_data)

3. 批量处理示例代码

from bs4 import BeautifulSoup
import html
import json
import pandas as pd

# 模拟包含多个带转义JSON属性的HTML
sample_html = '''
<div class="property" data-listing="{&quot;id&quot;:101,&quot;title&quot;:&quot;市中心两居室&quot;,&quot;price&quot;:180000,&quot;area&quot;:62}"></div>
<div class="property" data-listing="{&quot;id&quot;:102,&quot;title&quot;:&quot;地铁口三居室&quot;,&quot;price&quot;:260000,&quot;area&quot;:95}"></div>
'''

# 解析HTML并批量提取数据
soup = BeautifulSoup(sample_html, 'html.parser')
property_items = soup.find_all('div', class_='property')

all_data = []
for item in property_items:
    escaped_str = item['data-listing']
    json_str = html.unescape(escaped_str)
    all_data.append(json.loads(json_str))

# 转为DataFrame
df = pd.DataFrame(all_data)
print(df)

运行输出:

id       title   price  area
0  101  市中心两居室  180000    62
1  102  地铁口三居室  260000    95

4. 常见问题处理

  • 若遇到转义残留,可手动用str.replace()处理,比如raw_json_str = raw_json_str.replace('\\\\', '\\')(按需使用,避免破坏合法转义)
  • 若JSON解析失败,先打印raw_json_str检查,确认反转义后的内容是否符合JSON规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:24:23