Добрый день, есть задача вытащить из html страницы полное содержимое тега, вместе с внутренними тегами.
Например:
<html>
<body>
<div class="post">
text <p> text </p> text <a> text </a>
<span> text </span>
<div class="post">
another text <p> text </p>
</body>
</html>
И получить нужно первый
<div class="post">
text <p> text </p> text <a> text </a>
<span> text </span>
Пока получается доставать только текст, вот этим выражением (здесь еще игнорирование тега script есть):
(//div[@class="post"])[1]/descendant-or-self::*[not(name()="script")]/text()
Результат:
text text text text text
Если использовать node(), то каждый тег возвращается в виде объекта и как все это в строку в виде html превратить не знаю. Возвращается, что-то типа этого (Вот эти
<Element p at 0xb62f939c>
как преобразовать обратно, не знаю):
[<Element div at 0xb648193c>, u'\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u0443\u0431\u0442\u0438\u0442\u0440\u0430\u043c\u0438', <Element p at 0xb62f939c>, ...]
Есть вариант использовать BeautifulSoup, но я все еще надеюсь на xpath, помогите.
soup = BeautifulSoup(html)
text = [child.strip() if isinstance(child, str) else str(child) for child in soup.find('div', attrs={'class': 'post'})]
text = ''.join(text)
print text