python - .next_sibling 返回类型 NoneType
问题描述
我对 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
程序返回兄弟类型变量是' NoneType '并且兄弟是空的,它显然应该是类型i。
我在这里做错了什么?
解决方案
您可以忽略“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"']
推荐阅读
- r - 使用 purrr 中的 map 函数创建 ggplot2
- kotlin - @RestResource(exported = false) 不适用于基于 kotlin 的 spring mvc 项目的 findById 函数
- java - IntelliJ 在项目结构中显示额外的名称
- python - 为什么我为 Python asyncio 定制的 exception_handler 不能按预期工作?
- typescript - typescript webcomponent 创建问题
- apache-spark - 用于 spark 结构化流的自定义接收器
- html - 当我使用导航栏导航到该部分时,我的标题超过了该部分的第一个 114.19px?
- r - 传单闪亮的调色板问题
- python - 在 pytorch 和 keras 中保存模型
- docker - docker-compose:使用詹金斯将所有图像推送到人工服务器?