Ответ 1
Я не могу проверить это в данный момент, но это, по-видимому, общая идея
for tag in node.xpath('//*[@class]'):
tag.attrib.pop('class')
Как удалить атрибуты класса из 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)
Я не могу проверить это в данный момент, но это, по-видимому, общая идея
for tag in node.xpath('//*[@class]'):
tag.attrib.pop('class')
Для lxml
elment объект .attrib
содержит атрибут атрибутов, вы можете просто del
его по своему усмотрению.
Ниже приведен простой пример, чтобы показать, как заменить имя атрибута в html.
Учитывая html
:
<div><img src="http://www.example.com/logo.png"></div>
код:
from lxml.html import fromstring
from lxml.html import _transform_result
html = "<div><img src=\"http://www.example.com/logo.png\"></div>"
doc = fromstring(html)
for el in doc.iter('img'):
if "src" in el.attrib:
el.set('data-src', el.get('src'))
del el.attrib["src"]
print _transform_result(type(html), doc)
Результат:
<div><img data-src="http://www.example.com/logo.png"></div>