Форум сайта python.su
0
Всем привет 
Задача может быть и простая но я с таким не сталкивался.
Как из html-кода удалить определенный узел? Используя xpath шаблон.
Ниже примерно описал алгоритм. Не знаю только библиотеку и функцию который выполнили эту операцию 
import "какая_нибудь_стандартная_библиотека" html_code = '<html><head><title>Заголовок</title></head> и так далее ...</html>' xpath_parrent = '//title' result = "функция_удалить"(html_code, xpath_parrent) # теперь узла title больше нету # можно выводить на экран print title
Отредактировано tfox (Май 12, 2014 13:32:01)
Офлайн
34
Используйте lxml или xml.etree.ElementTree чтобы конвертировать ваш текст в xml.
После чего можно найти нужный вам элемент и удалить.
Офлайн
0
GreyZmeem
После чего можно найти нужный вам элемент и удалить.
Офлайн
34
Офлайн
857
GreyZmeemдля разбора html модуль xml не применяют, так как html не преобразуется в xml
или xml.etree.ElementTree чтобы конвертировать ваш текст в xml.
>>> import lxml.html >>> >>> s = '<html><head><title>test</title></head></html>' >>> >>> doc = lxml.html.fromstring(s) >>> node = doc.xpath('//title') >>> node[0].getparent().remove(node[0]) >>> lxml.html.tostring(doc) b'<html><head></head></html>' >>>
Отредактировано py.user.next (Май 12, 2014 15:47:18)
Офлайн
0
py.user.next
для разбора html модуль xml не применяют, так как html не преобразуется в xml
в xml не допускаются незакрытые теги
py.user.next
node.getparent().remove(node)
Офлайн
857
tfoxнужно через xpath найти родительский, а затем удалить его дочерние узлы
Подскажите. А как пройтись по всем узлам?
Офлайн
0
До петрив. Вот таким циклом можно.
doc = lxml.html.fromstring(a_text) node = doc.xpath('//h2') for i in node: i.getparent().remove(i)
Офлайн
0
py.user.next
Спасибо Вам.
Офлайн