【问题标题】:Find and delete HTML5 data-* attributes with bs4使用 bs4 查找和删除 HTML5 data-* 属性
【发布时间】:2018-08-12 07:05:46
【问题描述】:

HTML5 文件可能包含custom data-* attributes

我想用 bs4 查找并删除所有这些 data-* 属性。

根据 bs4 文档,可以使用 attrs 属性搜索这些属性。

例如:

import re
from bs4 import BeautifulSoup
data_soup = BeautifulSoup('<div data-foo="value">foo!</div>')
data_soup.find_all(attrs={"data-foo": "value"})

但是,以下行不起作用:

data_soup.find_all(attrs={re.compile('data.*') : True})
  1. 我需要使用什么正则表达式来查找所有 data-* 属性(无论它们的值如何)?

  2. 找到后,如何使用 del 将其删除?

【问题讨论】:

    标签: html python-3.x beautifulsoup


    【解决方案1】:

    是的,要删除属性,您只需在 tag.attrs 上使用 del

    data = '''
    <ul>
      <li data-animal-type="bird" data-other="this is other data">Owl</li>
      <li data-animal-type="fish">Salmon</li>
      <li data-animal-type="spider">Tarantula</li>
    </ul>'''
    
    from bs4 import BeautifulSoup
    
    soup = BeautifulSoup(data, 'lxml')
    
    print('Original soup:')
    print(soup)
    print('-' * 80)
    
    for tag in soup.find_all(lambda t: any(i.startswith('data-') for i in t.attrs)):
        for attr in list(tag.attrs):
            if attr.startswith('data-'):
                del tag.attrs[attr]
    
    print()
    print('Soup without data-* tags:')
    print(soup)
    print('-' * 80)
    

    打印出来:

    Original soup:
    <html><body><ul>
    <li data-animal-type="bird" data-other="this is other data">Owl</li>
    <li data-animal-type="fish">Salmon</li>
    <li data-animal-type="spider">Tarantula</li>
    </ul></body></html>
    --------------------------------------------------------------------------------
    
    Soup without data-* tags:
    <html><body><ul>
    <li>Owl</li>
    <li>Salmon</li>
    <li>Tarantula</li>
    </ul></body></html>
    --------------------------------------------------------------------------------
    

    【讨论】:

      猜你喜欢
      • 2012-03-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多