使用Beautiful Soup解析时使用“None”属性

2024-03-28 10:19:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我从Python和BeautifulSoup开始。我想用BS刮一个网站,我不明白我的代码结果和findfind_all的用法。我想在href标记中获取一个URL。你知道吗

<div class="xBRiJc">
<a href="https://play.google.com/store/apps/collection/cluster? 
 clp=igNLChkKEzc4NDcxODQ2MTE5MjkxMDc4NTgQCBgDEiwKJmFhZGVtby5zdXBlcmF3ZXNvbWUudHYuYXdlc29tZWFkc2RlbW8yEAEYAxgB:S:ANO1ljKZ36s&amp;gsr=Ck6KA0sKGQoTNzg0NzE4NDYxMTkyOTEwNzg1OBAIGAMSLAomYWFkZW1vLnN1cGVyYXdlc29tZS50di5hd2Vzb21lYWRzZGVtbzIQARgDGAE%3D:S:ANO1ljKKOPI"> .   
 <h2 class="C7Bf8e bs3Xnd">SuperAwesome LTD</h2></a></div>

下面是我的python代码:

    developer_link = bs.find("div",{"class":"xBRiJc"})
    print(developer_link.get('href'))

为什么我的print命令的结果是“None”,而不是href标记中的URL?你知道吗


Tags: 代码标记divurldeveloperbs网站link
1条回答
网友
1楼 · 发布于 2024-03-28 10:19:40

您将developer_link定义为包含链接的<div>标记,而不是链接本身。由于div标记本身没有“href”参数,developer_link.get('href')将返回None。所以你只需要更进一步:

>>> pagecode = """
... <div class="xBRiJc">
... ... <a href="https://play.google.com/store/apps/collection/cluster?
... ...  clp=igNLChkKEzc4NDcxODQ2MTE5MjkxMDc4NTgQCBgDEiwKJmFhZGVtby5zdXBlcmF3ZXNvbWUudHYuYXdlc29tZWFkc2RlbW8yEAEYAxgB:S:ANO1ljKZ36s&amp;gsr=Ck6KA0sKGQoTNzg0NzE4NDYxMTkyOTEwNzg1OBAIGAMSLAomYWFkZW1vLnN1cGVyYXdlc29tZS50di5hd2Vzb21lYWRzZGVtbzIQARgDGAE%3D:S:ANO1ljKKOPI"> .
... ...  <h2 class="C7Bf8e bs3Xnd">SuperAwesome LTD</h2></a></div>
... ... """
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup(pagecode, 'lxml')
>>> div = soup.find("div", class_="xBRiJc")
>>> link = div.find("a")
>>> print(link.get('href'))
https://play.google.com/store/apps/collection/cluster?
...  clp=igNLChkKEzc4NDcxODQ2MTE5MjkxMDc4NTgQCBgDEiwKJmFhZGVtby5zdXBlcmF3ZXNvbWUudHYuYXdlc29tZWFkc2RlbW8yEAEYAxgB:S:ANO1ljKZ36s&gsr=Ck6KA0sKGQoTNzg0NzE4NDYxMTkyOTEwNzg1OBAIGAMSLAomYWFkZW1vLnN1cGVyYXdlc29tZS50di5hd2Vzb21lYWRzZGVtbzIQARgDGAE%3D:S:ANO1ljKKOPI

但是看看这个例子,我猜div的类是动态生成的。如果是这样,那么当您重新访问页面时,div的类可能不是“xBRiJc”,这意味着它不是链接的可靠标识符。如果您只是想获取文本中包含“SuperAwesome LTD”的第一个链接,那么可以使用一些regex技巧来获取基于tht的链接。但是如果你知道你的链接里面有一个H2标签,它的实际文本是“SuperAwesome LTD”,那么你可以这样做:

t = soup.find('h2')
print(t.parent.get('href'))

相关问题 更多 >