如何使用BeautifulSoup查找具有class属性的href链接

5
<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'])

但是它没有输出任何内容,也没有给出错误。

任何帮助都是有用的,谢谢。


可能是重复的问题,参考如何通过类名查找元素 - dmuensterer
你不需要关心数据属性,只需关注类。 - Daniel Roseman
@Dominik 不,我不是在尝试找到一个类。我试图获取href链接,但它被同一行上的一个类包围着。就像我说的,我熟悉BS4,我知道如何找到一个简单的类。谢谢。 - DevinGP
不,你正在尝试查找class为"pet-card__link"的a标签。 - Daniel Roseman
@DanielRoseman 是的,我该如何去做呢? - DevinGP
2个回答

6

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 - DevinGP
该响应根本不包含任何“pet-” div。 - Daniel Roseman
我知道这就是我想到的问题所在...但是当我访问那个链接并检查页面的某个部分时,它就会正确显示,所以我不确定出了什么问题。 - DevinGP
您可以在此截图中看到特定的行已经被突出显示,并且链接本身也在其中。 - DevinGP

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

请尝试这个解决方案。

不幸的是,仍然没有打印任何东西。 - DevinGP
1
你使用的是哪个版本的BeautifulSoup? - yogkm
我正在使用BeautifulSoup4。 - DevinGP
1
@DevinGP 我的意思是BeautifulSoup4的哪个版本。 - yogkm

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