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 删除它们?

请您参考如下方法:

是的,要删除属性,您只需在 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> 
-------------------------------------------------------------------------------- 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!