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

16

我正在使用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链接的列表?

3个回答

21

你正在告诉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

但是当我这样做时,我只得到了第一个链接: http://www.acontecaeventos.com.br/ 我应该使用for循环获取它们全部吗? - user1922364
links = soup.find_all('a') 给出了所有链接的列表。我在答案的底部代码中使用第一个链接作为示例。是的,循环遍历 links 列表来访问找到的所有链接。 - Anonta

14

替换你的最后一行:

links = soup.find_all('a')

通过这条线:

links = [a.get('href') for a in soup.find_all('a', href=True)]
它将抓取所有的 a 标签,并且对于每个 a 标签,它将把 href 属性添加到链接列表中。
如果你想了解更多关于在 [] 之间的 for 循环的内容,请阅读有关 列表推导式 的内容。

1

要获取每个href的列表,无论标签如何使用:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接