从页面中获取所有链接 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 标签
python 使用Beautiful Soup从页面中提取数据