首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python (bs4)获取不位于段落括号之间的第一个常规链接

使用python (bs4)获取不位于段落括号之间的第一个常规链接
EN

Stack Overflow用户
提问于 2022-05-15 19:45:23
回答 1查看 25关注 0票数 1

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

不过,有一个限制是,我必须选择第一个不在方括号fe之间的链接:

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

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

我的问题是,我不知道如何才能找到第一个链接,而不是括号之间的第一段。这是我已经拥有的:

代码语言:javascript
复制
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")```
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-15 19:56:24

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

代码语言:javascript
复制
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)

指纹:

代码语言:javascript
复制
<a href="/wiki/Outline_of_philosophy" title="Outline of philosophy">branch of philosophy</a>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72251687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档