Nem*_*XXX 3 html beautifulsoup python-3.x
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"})
Run Code Online (Sandbox Code Playgroud)
但是,以下行不起作用:
data_soup.find_all(attrs={re.compile('data.*') : True})
Run Code Online (Sandbox Code Playgroud)
我需要使用什么正则表达式来查找所有data-*属性(无论它们的值如何)?
找到后,如何使用del删除它们?
是的,要删除属性,您只需使用delon 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)
Run Code Online (Sandbox Code Playgroud)
这打印:
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>
--------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
983 次 |
| 最近记录: |