首页 > 解决方案 > 如何使用 BeautifulSoup4 仅获取“href”?

问题描述

我试图只从结果中获取链接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;ctx=jobs-tab-view-candidates

标签: pythonbeautifulsoup

解决方案


在将 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

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


推荐阅读