因为最近有一些特殊需求,需要剔除xpath取到的所有标签的所有属性。代码如下,有bug可以和我反馈。
import re
from lxml import etree
html = """<div class="box"><h1><strong id="d7" class= "k8">测试</strong></h1><div><p></p></div></div>"""
doc = etree.HTML(html)
msg = doc.xpath("//div[@class='box']")[0]
# 取该div下的所有标签及文本
html_str = etree.tostring(msg, method="html", encoding='utf8').decode("utf-8")
# 正则匹配所有的属性
tag_style = re.findall(r'<[^>]*?(\s.*?)>', html_str)
# 替换所有的属性为""
for tag in tag_style:
html_str = html_str.replace(tag, '')
print(html_str)
打印结果如下:
<div><h1><strong>测试</strong></h1><div><p></p></div></div>
————————————————分割线——————————————
最近发现第二种方法更为简单,直接上代码, 核心方法为strip_attributes()
if doc.xpath('//p[@class="keywords"]/a'):
msg = doc.xpath('//p[@class="keywords"]/a')[0]
etree.strip_attributes(msg, "{}*")
result = etree.tostring(msg, method="html", encoding='utf-8').decode()
return result
返回结果只有标签和文本,没有标签的属性。