如何使用 BeautifulSoup4 仅获取“href”? [复制]

Posted

技术标签:

【中文标题】如何使用 BeautifulSoup4 仅获取“href”? [复制]【英文标题】:How to get only "href" with BeautifulSoup4? [duplicate] 【发布时间】:2019-09-28 16:02:56 【问题描述】:

我试图只从find_all() 的结果中获取链接

这是我的代码:

    mydivs = soup.find_all("td", "class": "candidates")
    for link in mydivs:
        print(link)

但它返回:

<td class="candidates"><div><a data-tn-element="view-unread-candidates" data-tn-link="true" href="/c#candidates?id=a722443b402&amp;ctx=jobs-tab-view-candidates">56 candidates</a><br/><a data-tn-element="view-unread-candidates" data-tn-link="true" href="/c#candidates?id=a7b2a139b402&amp;candidateFilter=4af15d8991a8"><span class="jobs-u-font--bold">(45 awaiting review)</span></a></div></td>

我想得到什么:

/c#candidates?id=a722443b402&amp;amp;ctx=jobs-tab-view-candidates

【问题讨论】:

是否要包含 href?这是否已经转换为字符串?老实说,这并不是一个真正的 MCVE。 嘿!我只想得到那个/c#candidates?id=a7b2a139b402&amp;amp;candidateFilter=4af15d8991a8 使用this @daka 我正在浏览您发送的帖子。我正在尝试link.href,但它返回None。我的值link&lt;Class bs4.element.Tag&gt;,它包含一个href。可以请教吗? 在尝试访问href 属性之前,您需要找到其中的a 元素。 【参考方案1】:

在将 bs4 元素转换为字符串后,您可以使用正则表达式解析 href 和最后一个引号之间的所有内容。

import re

#Rest of imports/code up until your script. 

mydivs = soup.find_all("td", "class": "candidates")
or link in mydivs:
   link_text = str(link)
   href_link = re.search('href = "(.+?)"', link_text)
   print(href_link.group(1))

如下所示的小例子:

import re

link_text = '<td class = "candidates" > <div > <a data-tn-element = "view-unread-candidates" data-tn-link = "true" href = "/c#candidates?id=a722443b402&amp;ctx=jobs-tab-view-candidates" > 56 candidates < /a > <br/> < a data-tn-element = "view-unread-candidates" data-tn-link = "true" href = "/c#candidates?id=a7b2a139b402&amp;candidateFilter=4af15d8991a8" > <span class = "jobs-u-font--bold" > (45 awaiting review) < /span > </a > </div > </td >'
href_link = re.search('href = "(.+?)"', link_text)
print(href_link.group(1))

输出:

/c#candidates?id=a722443b402&amp;ctx=jobs-tab-view-candidates

您可能需要使用 re.search 内部的 href = " 处理间距,因为我看不到标签的样子。但是您需要做的就是从 href 复制确切的文本,直到您希望它起作用的链接的第一个字符。

【讨论】:

见我上面的评论。 不,因为它不必要地复杂,这使它成为一个糟糕的答案,值得一票否决。 查看用户如何尝试您标记为重复的帖子并返回 None 我不会称这过于复杂,而是一种可行的解决方案。

以上是关于如何使用 BeautifulSoup4 仅获取“href”? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Beautifulsoup4 没有返回页面上的所有链接

Beautifulsoup4 - 通过强标记值识别信息仅适用于标记的某些值

如何从 BeautifulSoup4 中的 html 标签中找到特定的数据属性?

如何使用python和beautifulsoup4循环抓取网站中多个页面的数据

使用python和beautifulsoup4抓取网页后重复数据

Python利用BeautifulSoup4库获取input标签的value值