Как получить всё содержимое внутри 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(
'<div>Тек<br>ст1<h2>Тек<br>ст2</h2>Текст3<br/>Текст4</div>'
)
>>> lxml.html.tostring(node, encoding='unicode')
'<div>Тек<br>ст1<h2>Тек<br>ст2</h2>Текст3<br>Текст4</div>'
>>> inner_html(node)
'Тек<br>ст1<h2>Тек<br>ст2</h2>Текст3<br>Текст4'
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как можно с использованием nth-of-type или nth-child выделить элементы в таком порядке:
Вопрос мой состоит в том, что нужно чтобы оранжевая полоса стала как на картинке