如何使用BeautifulSoup4解析标签中类似JS对象格式的属性值?
你提取到的data-prop属性值属于非标准JSON的JS对象字面量,不需要写复杂正则解析,以下是更简洁高效的实现方案:
方案1:使用Python标准库ast.literal_eval(最推荐,无额外依赖)
ast.literal_eval是Python内置的安全字面量解析工具,仅会解析字典、列表、字符串这类基础数据结构,不会执行任意代码,安全性和解析效率都远高于自定义正则,而且刚好适配你给出的属性格式:
from ast import literal_eval from bs4 import BeautifulSoup soup = BeautifulSoup(data,'html.parser') class_element = soup.find("div", class_="class1") # 注意:Python变量名不能用连字符,原代码的data-props需要改为下划线命名 data_prop_str = class_element['data-prop'] # 一行代码完成解析,直接得到Python字典 data_prop = literal_eval(data_prop_str) # 后续可直接通过键取值 print(data_prop['personName']) # 输出 Claudia print(data_prop['personCode']) # 输出 123456
如果属性值里存在JS特有的小写字面量true/false/null,只需做简单的预处理即可适配:
data_prop_str = data_prop_str.replace("true", "True").replace("false", "False").replace("null", "None") data_prop = literal_eval(data_prop_str)
方案2:使用宽松JSON解析库(适配复杂格式)
如果遇到包含尾逗号、注释等更特殊的JS对象格式,可以使用demjson3这类第三方宽松解析库,无需手动预处理:
- 安装依赖:
pip install demjson3 - 解析代码:
import demjson3 data_prop = demjson3.decode(data_prop_str)
内容的提问来源于stack exchange,提问作者fazineroso
相关产品推荐
相关产品推荐

