gpt4 book ai didi

python - 使用 BeautifulSoup 获取两个 h2 标题之间的文本

转载 作者:行者123 更新时间:2023-11-28 21:06:27 29 4
gpt4 key购买 nike

我想抓取描述之后和下一个 header 之前的文本。

我知道:

In [8]: soup.findAll('h2')[6]
Out[8]: <h2>Description</h2>

但是,我不知道如何抓取实际的文本。问题是我有多个链接可以执行此操作。有些有 p:

                                         <h2>Description</h2>

<p>This is the text I want </p>
<p>This is the text I want</p>
<h2>Next header</h2>

但是,有些人没有:

>                                       <h2>Description</h2>
> This is the text I want
>
> <h2>Next header</h2>

另外,在每个带有 p 的对象上,我不能只执行 soup.findAll(‘p’)[22],因为在某些对象上,‘p’ 位于 21 或 20。

最佳答案

检查 NavigableString 以检查下一个兄弟是否是文本节点或 Tag 以检查它是否是元素。

如果你的下一个兄弟是标题,则打破循环。

from bs4 import BeautifulSoup, NavigableString, Tag
import requests

example = """<h2>Description</h2><p>This is the text I want </p><p>This is the text I want</p><h2>Next header</h2>"""

soup = BeautifulSoup(example, 'html.parser')
for header in soup.find_all('h2'):
nextNode = header
while True:
nextNode = nextNode.nextSibling
if nextNode is None:
break
if isinstance(nextNode, NavigableString):
print (nextNode.strip())
if isinstance(nextNode, Tag):
if nextNode.name == "h2":
break
print (nextNode.get_text(strip=True).strip())

关于python - 使用 BeautifulSoup 获取两个 h2 标题之间的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42820342/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com