我需要用bs4用python编写一个程序,它可以显示一个维基百科站点到另一个维基百科站点的路径,为此,我必须在当前维基百科站点上的第一个链接,即第一段中位于'div',id=bodycontent中的链接。
不过,有一个限制是,我必须选择第一个不在方括号fe之间的链接:
认识论(/ɪˌpɪstəˈmɒlədʒi/ (听);来自古希腊ἐπιστήμη(epistḗmē)的“知识”和“知识”)是与知识有关的哲学分支。认识论者研究知识的性质、起源和范围、认识论的正当性、信仰的合理性以及各种相关的问题。认识论被认为是哲学的一个主要子领域,以及其他主要的子领域,如伦理学、逻辑和形而上学。
在这一段中,古希腊语是一个链接,但我不能使用这个链接,因为它位于括号之间,所以我必须使用的链接是哲学分支(https://en.wikipedia.org/wiki/Epistemology)。
我的问题是,我不知道如何才能找到第一个链接,而不是括号之间的第一段。这是我已经拥有的:
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")```发布于 2022-05-15 19:56:24
一种解决方案是将第一段作为文本,将(和)替换为自定义标记,然后再次解析。例如:
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>https://stackoverflow.com/questions/72251687
复制相似问题