Вопрос
Как удалить атрибуты класса из html с помощью python и lxml?
Пример
У меня есть:
<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, так и в других muddies. Многие из результатов также, похоже, строго относятся к 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)