python - 使用 Beautiful Soup 解析时的“无”属性

标签 python beautifulsoup

我从 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 命令的结果是“无”,而不是 href 标记中的 URL?

最佳答案

您正在定义 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”的第一个链接,您可以使用一些正则表达式技巧来获取仅基于 tht 的链接。但是如果你知道你的链接直接有一个 H2 标签,它的实际文本是“SuperAwesome LTD”,那么你可以这样做:

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

关于python - 使用 Beautiful Soup 解析时的“无”属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53381699/

相关文章:

python -/n 漂亮的汤文

python - 将直方图函数扩展到重叠的箱和具有任意间隙的箱?

python - 如何更改 python Mayavi 的窗口标题?

python - BeautifulSoup 在 Amazon EC2 机器上的行为有所不同

python beautiful soup元内容标签

python - 使用 BeautifulSoup 查找包含特定文本的 HTML 标签

python - 在 BeautifulSoup4 的 findAll 中包含多个类名

python - 无法调用类 bark()

python - 将 python 脚本更改为 Unix 行结束约定

python - 为 CUDA 9.0 安装 PyTorch 时遇到问题