Вопрос по python, html – Удалить атрибут класса из HTML, используя Python и lxml

16
Question

Как удалить атрибуты класса из html, используя python и lxml?

Example

Я имею:

<p class="DumbClass">Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>

Я хочу:

<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>
What I've tried so far

Я проверилlxml.html.clean.Cleaner однако у него нет метода для удаления атрибутов класса. Вы можете установитьsafe_attrs_only=True однако это не удаляет атрибут класса.

Значительный поиск ничего не дал работоспособного. Я думаю, что тот факт, чтоclass используется как в HTML, так и в Python. Многие из результатов, похоже, также имеют дело исключительно с xml.

Я открыт для других модулей Python, которые также предлагают гуманные интерфейсы.

Большое спасибо.

Solution

Благодаря ответу @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)
clean=re.sub('class=".*?"','', html) - не смог устоять polvoazul
Благодарю. Я полагаю, если люди достаточно хороши, чтобы помочь мне, я должен заплатить это вперед и сделать это легко для них и других в будущем :) Jeff
+1 за форматирование вопроса. Joao Figueiredo

Ваш Ответ

2   ответа
15

for tag in node.xpath('//*[@class]'):
    tag.attrib.pop('class')
Error: User Rate Limit Exceeded Jeff
0

lxml элемент,.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>
Error: User Rate Limit Exceeded

Похожие вопросы