LXML - отличная библиотека. Не нужно использовать BeautiulSoup или любой другой. Вот как получить дополнительную информацию, которую вы ищете:
# import lxml HTML parser and HTML output function
from __future__ import print_function
from lxml.html import fromstring
from lxml.etree import tostring as htmlstring
# test HTML for demonstration
raw_html = """
<div class="story-body__inner">
<p>Test para with <b>subtags</b></p>
<blockquote>quote here</blockquote>
<img src="...">
</div>
"""
# parse the HTML into a tree structure
innerTree = fromstring(raw_html)
# find the divs you want
# first by finding all divs with the given CSS selector
divs = innerTree.cssselect('div.story-body__inner')
# but that takes a list, so grab the first of those
div0 = divs[0]
# print that div, and its full HTML representation
print(div0)
print(htmlstring(div0))
# now to find sub-items
print('\n-- etree nodes')
for e in div0.xpath(".//*"):
print(e)
print('\n-- HTML tags')
for e in div0.xpath(".//*"):
print(e.tag)
print('\n-- full HTML text')
for e in div0.xpath(".//*"):
print(htmlstring(e))
lxml
Обратите внимание, что функции, такие как cssselect
и xpath
возвратных списков узлов, а не одиночные узлы. Вы должны индексировать эти списки, чтобы получить включенные узлы, даже если есть только один.
Получить все подтеги или под-HTML может означать несколько вещей: получение узлов ElementTree
, получение имен тегов или получение полного текста HTML этих узлов. Этот код демонстрирует все три. Он делает это, используя запрос XPath. Иногда CSS-селектора более удобны, иногда XPath. В этом случае запрос XPath .//*
означает «вернуть все узлы с любым именем тега на любой глубине под текущим узлом».
Ниже приведены результаты его запуска под Python 2. (Тот же код работает под управлением Python 3, хотя вывод текст немного отличается, так как etree.tostring
возвращает байты строки не Unicode струнных под Python 3.)
<Element div at 0x106eac8e8>
<div class="story-body__inner">
<p>Test para with <b>subtags</b></p>
<blockquote>quote here</blockquote>
<img src="..."/>
</div>
-- etree nodes
<Element p at 0x106eac838>
<Element b at 0x106eac890>
<Element blockquote at 0x106eac940>
<Element img at 0x106eac998>
-- HTML tags
p
b
blockquote
img
-- full HTML text
<p>Test para with <b>subtags</b></p>
<b>subtags</b>
<blockquote>quote here</blockquote>
<img src="..."/>
в моем случае beautifullsoup не работают очень хорошо и дает мне incorrent HTML-тег !, Я должен найти решение для выше. – Mehdi