【问题标题】:Getting all Links from a page Beautiful Soup从页面中获取所有链接 Beautiful Soup
【发布时间】:2023-04-02 22:49:01
【问题描述】:

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

【问题讨论】:

    标签: python web-scraping beautifulsoup html-parsing


    【解决方案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]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-08
        相关资源
        最近更新 更多