我对Python很陌生,正在尝试访问标签的下一个兄弟姐妹的信息。 HTML代码如下所示:
<h4>
<i>
<b>"Title"</b>
</i>
</h4>
<i>"Description"</i>
我正在运行一个 for 循环,该循环遍历每个 h4 标记并查找所有同级,直到到达新的 h4 标记。在这两个 h4 标签之间,可以有多个同级。当我运行代码时:
title = course.find_all('h4')[x]
array = []
sibling = title
while True:
sibling = sibling.next_sibling
try:
siblingType = sibling.name
except AttributeError:
siblingType = ''
if siblingType != 'h4':
array.append(sibling.text)
else:
break
程序返回 siblingType 变量为'NoneType',并且兄弟姐妹为空,显然它应为 i 类型。
我在这里怎么可能做错了?
答案 0 :(得分:0)
您可以忽略“ h4”和“ I”之间的换行符。这样的节点的类型为NavigableString
。
另一种方法是搜索Tag
类型的下一个非空节点,如果遇到另一个“ h4”,则中断循环:
array = []
sibling = title.next_sibling
while True:
while sibling and not isinstance(sibling, bs4.element.Tag):
sibling = sibling.next_sibling
if sibling is None or sibling.name == "h4":
break
array.append(sibling.get_text())
sibling = sibling.next_sibling
print(array)
您得到:
['"Description"']
此解决方案也适用于以下情况:
<h4>
<i>
<b>"Title"</b>
</i>
</h4>
<i>"Description"</i>
<i>"Description2"</i>
<h4>
<i>
<b>"Title2"</b>
</i>
</h4>
您得到:
['"Description"', '"Description2"']