#html #python #lxml
Как получить всё содержимое внутри HTML-тега в lxml, но без самого тега?
Ответы
Ответ 1
Встроенного метода вроде бы нет, но нетрудно написать свой. Проблема в том, что простой текст в 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>ст1' ) >>> lxml.html.tostring(node, encoding='unicode') 'Тек<br>ст2
Текст3
Текст4Тек<br>ст1' >>> inner_html(node) 'Тек<br>ст1Тек<br>ст2
Текст3
Текст4Тек<br>ст2
Текст3
Текст4'
Комментариев нет:
Отправить комментарий