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 文件?保存下来想要的数据不行吗

你要 img 直接 attr 取嘛 和你 text 不矛盾啊

回到顶部