Подтвердить что ты не робот

Удалить атрибут класса из HTML с помощью Python и lxml

Вопрос

Как удалить атрибуты класса из 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)
4b9b3361

Ответ 1

Я не могу проверить это в данный момент, но это, по-видимому, общая идея

for tag in node.xpath('//*[@class]'):
    tag.attrib.pop('class')

Ответ 2

Для 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>