从特定点用 BeautifulSoup 浏览 html

Navigating through html with BeautifulSoup from a specific point

我正在使用以下代码在一段 HTML 代码中查找属性:

results = soup.findAll("svg", {"data-icon" : "times"})

这行得通,returns 我得到了一个包含标签和属性的列表。但是,我还想从 HTML 代码的那部分移动到它下面的兄弟(如果这是正确的术语),并检索该段落的内容。请参阅下面的示例。

<div class="382"><svg aria-hidden="true" data-icon="times".......</svg></div>
<div class="405"><p>Example</p></div>

我似乎不知道如何正确地做到这一点。搜索 div class 名称不起作用,因为 class 名称是 随机化的 .

您可以将 CSS 选择器与 +:

一起使用
from bs4 import BeautifulSoup

html_doc = """
<div class="382"><svg aria-hidden="true" data-icon="times"> ... </svg></div>
<div class="405"><p>Example</p></div>
"""

soup = BeautifulSoup(html_doc, "html.parser")

div = soup.select_one('div:has(svg[data-icon="times"]) + div')
print(div.text)

打印:

Example

或没有 CSS 选择器:

div = soup.find("svg", attrs={"data-icon": "times"}).find_next("div")
print(div.text)

打印:

Example