从页面中获取所有链接 Beautiful Soup

Posted

技术标签:

【中文标题】从页面中获取所有链接 Beautiful Soup【英文标题】:Getting all Links from a page Beautiful Soup 【发布时间】:2018-03-11 11:10:00 【问题描述】:

我正在使用 beautifulsoup 来获取页面中的所有链接。我的代码是:

import requests
from bs4 import BeautifulSoup


url = 'http://www.acontecaeventos.com.br/marketing-promocional-sao-paulo'
r = requests.get(url)
html_content = r.text
soup = BeautifulSoup(html_content, 'lxml')

soup.find_all('href')

我得到的只是:

[]

如何获得该页面上所有 href 链接的列表?

【问题讨论】:

【参考方案1】:

您正在告诉find_all 方法查找href 标签,不是 属性。

你需要找到<a>标签,它们是用来表示链接元素的。

links = soup.find_all('a')

稍后您可以像这样访问他们的href 属性:

link = links[0]          # get the first link in the entire page
url  = link['href']      # get value of the href attribute
url  = link.get('href')  # or like this

【讨论】:

但是当我这样做的时候,我只是得到第一个链接:acontecaeventos.com.br 我应该做一个 for 循环并把它们全部拿走吗? links = soup.find_all('a') 为您提供所有链接的列表。我在答案的底部代码中使用了第一个链接作为示例。是的,遍历links 列表以访问找到的所有链接。【参考方案2】:

替换你的最后一行:

links = soup.find_all('a')

通过那条线:

links = [a.get('href') for a in soup.find_all('a', href=True)]

它将废弃所有的a标签,并且对于每个a标签,它会将href属性附加到链接列表中。

如果您想了解更多关于[] 之间的for 循环,请阅读List comprehensions。

【讨论】:

【参考方案3】:

获取everyhref的列表而不考虑标签的使用:

href_tags = soup.find_all(href=True)   
hrefs = [tag.get('href') for tag in href_tags]

【讨论】:

以上是关于从页面中获取所有链接 Beautiful Soup的主要内容,如果未能解决你的问题,请参考以下文章

使用 Beautiful Soup 提取链接的等效正则表达式

使用 Beautiful Soup 获取所有 HTML 标签

Beautiful Soup - 在文章中找到第一个链接

python 使用Beautiful Soup从页面中提取数据

Python爬虫编程思想(52):使用Beautiful Soup选择子节点

如何使用涉及html表的Beautiful Soup从页面中抓取产品信息[关闭]