Python中如何清理爬虫数据中不需要的HTML属性
比如对于以下数据
<p id="a">data</p>
我只想保留
<p>data</p>
该如何操作,有快捷的方法吗?
Python中如何清理爬虫数据中不需要的HTML属性
11 回复
用 text()提取出文本吧,就能取出 data 了吧
清理爬虫数据中不需要的HTML属性,用BeautifulSoup最直接。主要思路是遍历标签,用attrs属性删除特定属性。
核心代码示例:
from bs4 import BeautifulSoup
html_doc = """
<div id="old" class="container" style="color:red;" data-temp="remove" onclick="alert()">
<p class="text" style="font-size:14px;">测试文本</p>
</div>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
# 1. 删除所有标签的特定属性(如 style, onclick)
for tag in soup.find_all(True):
# 删除单个属性
if 'style' in tag.attrs:
del tag.attrs['style']
# 删除多个属性
attrs_to_remove = ['onclick', 'data-temp']
for attr in attrs_to_remove:
if attr in tag.attrs:
del tag.attrs[attr]
# 2. 只保留指定属性(白名单方式)
allowed_attrs = ['class', 'id']
for tag in soup.find_all(True):
# 获取当前标签所有属性名
attrs = list(tag.attrs.keys())
for attr in attrs:
if attr not in allowed_attrs:
del tag.attrs[attr]
print(soup.prettify())
关键点:
soup.find_all(True)获取所有标签- 直接操作
tag.attrs字典来增删属性 - 白名单方式更安全,黑名单方式更灵活
用白名单控制更干净。
直接正则 replaceAll("<\S+\s(.*?)>","")
唔… 大概有这种语法吧…
lxml.html.clean
二楼的正则可以搞定吧
Xpath 语法可解
/text() 吗,我还是要保留 html 标签的,毕竟内容里有 img
为什么要保留 html 文件?保存下来想要的数据不行吗
都让开,看我这个贴: https://www.v2ex.com/t/342064#reply12
你要 img 直接 attr 取嘛 和你 text 不矛盾啊

