代码之家  ›  专栏  ›  技术社区  ›  Nemo XXX

使用bs4查找和删除HTML5数据-*属性

  •  1
  • Nemo XXX  · 技术社区  · 6 年前

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

    我想找到并删除所有这些 属性 英国标准4

    英国标准4 财产。

    例如:

    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. 数据-* 属性(不管其值如何)?

    2. 德尔 ?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Andrej Kesely    6 年前

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

    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>
    --------------------------------------------------------------------------------