我有一些网页,我想按级别对所有文本内容进行排序。 但我不知道会有什么标签。
html = BeautifulSoup("<a><b>text1</b><b>text2</b></a><c>text3</c>")
print(html.prettify())
#<html>
# <body>
# <a>
# <b>
# text1
# </b>
# <b>
# text2
# </b>
# </a>
# <c>
# text3
# </c>
# </body>
#</html>
如何使用bs4获取所有文本块?
level1 = ['text3']
level2 = ['text1', 'text2']
依旧......结果的结构可能不同。
感谢您的回复!
答案 0 :(得分:1)
解决此问题的方法之一是使用算法搜索树(例如深度优先搜索)
from bs4 import NavigableString
def dfs(tree, level):
for node in tree.children:
if isinstance(node, NavigableString):
if not node.string == '':
print node.string, level
return
dfs(node, level + 1)
dfs(html, 0)
会打印
# text1 4
# text2 4
# text3 3
因此,如果有必要,我们可以制作一个包装器将结果保存到字典中。例如,像这样:
from bs4 import NavigableString
def dfs(tree):
level = 0
levDic = {}
dfs1(tree, level, levDic)
return levDic
def dfs1(tree, level, levDic):
for node in tree.children:
if isinstance(node, NavigableString):
if not node.string == '':
if level in levDic.keys():
levDic[level].append(node.string)
else:
levDic[level] = [node.string]
return
dfs1(node, level + 1, levDic)
return
print dfs(html)
# {3: [u'text3'], 4: [u'text1', u'text2']}