问题
如何使用 python 和 lxml 从 html 中删除类属性?
例子
我有:
<p class="DumbClass">Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>
我想:
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>
到目前为止我尝试过的
我已经检查了lxml.html.clean.Cleaner但是,它没有去除类属性的方法。但是,您可以设置safe_attrs_only=True
,这不会删除类属性。
重要的搜索没有发现任何可行的方法。class
我认为在 html 和 python 中都使用的事实进一步混淆了搜索结果。许多结果似乎也严格处理 xml。
我也对提供人性化界面的其他 python 模块持开放态度。
非常感谢。
解决方案
感谢@Dan Roberts 下面的回答,我想出了以下解决方案。为将来到达这里尝试解决相同问题的人们提供。
import lxml.html
# Our html string we want to remove the class attribute from
html_string = '<p class="DumbClass">Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>'
# Parse the html
html = lxml.html.fromstring(html_string)
# Print out our "Before"
print lxml.html.tostring(html)
# .xpath below gives us a list of all elements that have a class attribute
# xpath syntax explained:
# // = select all tags that match our expression regardless of location in doc
# * = match any tag
# [@class] = match all class attributes
for tag in html.xpath('//*[@class]'):
# For each element with a class attribute, remove that class attribute
tag.attrib.pop('class')
# Print out our "After"
print lxml.html.tostring(html)