例如,我有HTML代码,其中包含这样的代码
<a href="some" class="some" onclick="return false;">anchor</a>
<table id="some">
<tr>
<td class="some">
</td>
</tr>
</table>
<p class="" style="">content</p>
我想要删除所有标签属性并仅保存一些标签(例如,删除table,tr,tr,th标签),所以,我想得到这样的东西。
<a href="some">anchor</a>
<table>
<tr>
<td>
</td>
</tr>
</table>
<p>content</p>
我使用for循环,但我的代码检索每个标记并清除它。我认为我的方式很慢。
你能建议我什么?感谢。
更新#1
在我的解决方案中,我使用此代码删除标签(从django窃取)
def remove_tags(html, tags):
"""Returns the given HTML with given tags removed."""
tags = [re.escape(tag) for tag in tags.split()]
tags_re = '(%s)' % '|'.join(tags)
starttag_re = re.compile(r'<%s(/?>|(\s+[^>]*>))' % tags_re, re.U)
endtag_re = re.compile('</%s>' % tags_re)
html = starttag_re.sub('', html)
html = endtag_re.sub('', html)
return html
此代码用于清理HTML属性
# But this code doesnt remove empty tags (without content ant etc.) like this `<div><img></div>`
import lxml.html.clean
html = 'Some html code'
safe_attrs = lxml.html.clean.defs.safe_attrs
cleaner = lxml.html.clean.Cleaner(safe_attrs_only=True, safe_attrs=frozenset())
html = cleaner.clean_html(html)
答案 0 :(得分:3)
html = """
<a href="some" class="some" onclick="return false;">anchor</a>
<table id="some">
<tr>
<td class="some">
</td>
</tr>
</table>
<p class="" style="">content</p>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
del soup.table.tr.td.attrs
del soup.table.attrs
print(soup.prettify())
<html>
<body>
<a class="some" href="some" onclick="return false;">
anchor
</a>
<table>
<tr>
<td>
</td>
</tr>
</table>
<p class="" style="">
content
</p>
</body>
</html>
清除标签:
soup = BeautifulSoup(html)
soup.table.clear()
print(soup.prettify())
<html>
<body>
<a class="some" href="some" onclick="return false;">
anchor
</a>
<table id="some">
</table>
<p class="" style="">
content
</p>
</body>
</html>
删除特定属性:
soup = BeautifulSoup(html)
td_tag = soup.table.td
del td_tag['class']
print(soup.prettify())
<html>
<body>
<a class="some" href="some" onclick="return false;">
anchor
</a>
<table id="some">
<tr>
<td>
</td>
</tr>
</table>
<p class="" style="">
content
</p>
</body>
</html>
答案 1 :(得分:1)
您正在寻找的是解析。
BeautifulSoup是用于解析html的最受欢迎/最常用的库之一。 你可以用它来删除标签,它很好documented。
如果你(由于某种原因)不能使用BeautifulSoup,那么请查看python re
模块。