如何使用 BeautifulSoup 查找类的 href 链接

Posted

技术标签:

【中文标题】如何使用 BeautifulSoup 查找类的 href 链接【英文标题】:How to use BeautifulSoup to find an href link with a class 【发布时间】:2019-02-19 06:57:29 【问题描述】:
<div data-pet-card="pet-card" class="pet-card">

    <a data-pet-card="pet-card-link" href="https://Link-I-Want.com" 
    class="pet-card__link">

我习惯于使用 BS4 抓取 html,但我对 html 本身并不十分熟悉,也没有遇到过同样具有类和 data-pet-card="pet-card-link" 的 href。我试过了:

for a in soup.find_all('a', href=True):
    print("Found the URL:", a['href'])

但它什么也不打印,也没有错误。

任何有用的,谢谢。

【问题讨论】:

How to find elements by class的可能重复 你不需要关心数据属性,只需要关心类。 @Dominik 不,不是在寻找课程。试图获取 href 链接,但它被同一行的一个类包围。就像我说的我熟悉 BS4,我会知道如何找到一个简单的类。谢谢 不,您正在尝试查找类为“pet-card__link”的a 标签。 @DanielRoseman 是的,我该怎么做 【参考方案1】:

您在find_all 调用中添加的属性是您拥有的东西,而不是您想要找到的东西。这里有类,所以使用它:

for a in soup.find_all('a', class_="pet-card__link"):
    print("Found the URL:", a['href']) 

(因为class是Python中的保留字,所以这里需要使用class_。)

【讨论】:

由于这仍然没有打印,所以我的请求肯定有问题。这是我所做的以及当我说 print(response.text) 时它会打印的内容:https://pastebin.com/FbJVnQUV 该响应根本不包含任何“pet-” div。 我知道这就是我认为的问题所在。但是当我转到该链接然后检查页面的一部分时,它会显示在那里,所以我不确定出了什么问题。 imgur.com/a/IhfxTuz 您可以在此屏幕截图中看到突出显示的特定行和链接本身【参考方案2】:
for a in soup.find_all('a', href=True):
    print("Found the URL:", a.get_attribute_list('href')[0])

请尝试此解决方案。

【讨论】:

不幸的是什么都没打印 您使用的是哪个版本的 BeautifulSoup? 我正在使用 BeautifulSoup4 @DevinGP 我的意思是 BeautifulSoup4 的哪个版本。

以上是关于如何使用 BeautifulSoup 查找类的 href 链接的主要内容,如果未能解决你的问题,请参考以下文章

使用 BeautifulSoup 删除具有特定类的 div

使用 BeautifulSoup 查找网页上的特定文本

使用 BeautifulSoup 查找 html 中的所有表

如何让 BeautifulSoup 获得以下 div 类的价值

使用 python 和正则表达式 BeautifulSoup lxml 查找文本

查找带有 beautifulsoup 的特定链接