簡體   English   中英

使用bs4查找和刪除HTML5 data- *屬性

[英]Find and delete HTML5 data-* attributes with bs4

HTML5文件可能包含自定義data- *屬性

我想用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刪除它們?

是的,要刪除屬性,只需在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>
--------------------------------------------------------------------------------

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM