如何使用 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 链接的主要内容,如果未能解决你的问题,请参考以下文章