如何使用BeautifulSoup4仅获取“ href”?

时间:2019-05-10 18:06:46

标签: python beautifulsoup

我正在尝试仅从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

1 个答案:

答案 0 :(得分:0)

在将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复制准确的文本,直到您要使其正常工作的链接的第一个字符为止。