使用 python (bs4) 从段落中获取第一个不在括号之间的正则 link

Get the first regular link that is not located between brackets out of a paragraph using python (bs4)

我需要使用 bs4 在 python 中编写一个程序,向我显示一个维基百科站点到另一个维基百科站点的路径,为此我必须在当前维基百科站点上获取第一个 link位于'div',id=bodycontent第一段。

不过,有一个限制,我必须取第一个不在括号 fe:

之间的 link

认识论(/ɪˌpɪstəˈmɒlədʒi/(听);来自古希腊语 ἐπιστήμη (epistḗmē) 'knowledge' 和 -logy)是与知识有关的哲学分支。认识论者研究知识的性质、起源和范围、认知论证、信仰的合理性以及各种相关问题。认识论与伦理学、逻辑学和形而上学等其他主要子领域一起被认为是哲学的一个主要子领域。[1]

在这一段中,古希腊语是 link 但我不能使用那个,因为它在括号之间所以我必须使用的 link 是 哲学的分支 (https://en.wikipedia.org/wiki/Epistemology).

我的问题是我不知道如何找到第一段中不在括号之间的第一个 link。这是我已有的:

while current != end:

        session.get(url)
        response = session.get(url)
        d = BeautifulSoup(response.content, 'html.parser')
        body = d.find('div',id = "bodyContent")
        d = body.find("p")
        while d.find('a') == None:
            d = d.findNext("p")

        d = d.find("a")```

一个解决方案是将第一段作为文本,将 () 替换为自定义标签并再次解析。例如:

import requests
from bs4 import BeautifulSoup


url = "https://en.wikipedia.org/wiki/Epistemology"

soup = BeautifulSoup(requests.get(url).content, "html.parser")

txt = (
    str(soup.select_one(".mw-parser-output p:has(a)"))
    .replace("(", "<bracket>")
    .replace(")", "</bracket>")
)

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

a = soup.find(lambda tag: tag.name == "a" and not tag.find_parent("bracket"))
print(a)

打印:

<a href="/wiki/Outline_of_philosophy" title="Outline of philosophy">branch of philosophy</a>