Как получить всё содержимое внутри HTML-тега в lxml, но без самого тега?
Ответ
Встроенного метода вроде бы нет, но нетрудно написать свой.
Проблема в том, что простой текст в lxml не является самостоятельным элементом (в отличие от Text Node в браузерах), поэтому нужно не забыть добавить text в начале.
from html import escape # Доступно с Python 3.2
import lxml.html
def inner_html(elem):
# Текст в самом начале внутри тега
# (не забываем про экранирование!)
result = [escape(elem.text or '')]
# Все элементы-потомки
for child in elem.iterchildren():
result.append(lxml.html.tostring(child, encoding='unicode'))
# Текст в конце тега принадлежит последнему элементу-потомку (tail)
# и добавится автоматически
# Собираем результат в одну строку
return ''.join(result)
# В примере подставим <br> чтобы проверить экранирование
>>> node = lxml.html.fragment_fromstring(
'
Тек<br>ст2
Текст3Текст4
>>> lxml.html.tostring(node, encoding='unicode') '
Тек<br>ст2
Текст3Текст4
>>> inner_html(node) 'Тек<br>ст1
Тек<br>ст2
Текст3Текст4'
Комментариев нет:
Отправить комментарий