当前位置:  开发笔记 > 编程语言 > 正文

为什么find_all会出现错误,即使找不到错误?(Python美丽的汤)

如何解决《为什么find_all会出现错误,即使找不到错误?(Python美丽的汤)》经验,为你挑选了1个好方法。

我试图从Billboard排名前100位获得歌曲的标题.图片是他们的html脚本. 网站的HTML

我写了这段代码:

from bs4 import BeautifulSoup
import urllib.request

url= 'http://www.billboard.com/charts/year-end/2015/hot-100-songs'
page = urllib.request.urlopen(url)
soup = BeautifulSoup(page.read(), "html.parser")
songtitle = soup.find("div", {"class": "row-title"}).h2.contents
print(songtitle)

它检索了第一个标题"UPTOWN FUNK!"
当我使用find_all它时给我错误:

line 6, in 
songtitle = soup.find_all("div", {"class": "row-title"}).h2.contents
AttributeError: 'ResultSet' object has no attribute 'h2'

为什么它给我一个错误,而不是给我所有的标题?在本网站上使用chrome Shift J in chrome可以找到完整的html脚本:http://www.billboard.com/charts/year-end/2015/hot-100-songs



1> alecxe..:

.find_all()返回一个ResultSet基本上是Tag实例列表的对象- 它没有find()方法.您需要循环结果find_all()并调用find()每个标记:

for item in soup.find_all("div", {"class": "row-title"}):
    songtitle = item.h2.contents
    print(songtitle)

或者,创建一个CSS选择器:

for title in soup.select("div.row-title h2"):
    print(title.get_text())

顺便说一下,文档中包含了这个问题:

AttributeError: 'ResultSet' object has no attribute 'foo'- 这通常是因为您希望find_all()返回单个标记或字符串.但是find_all()返回一个标签和字符串列表 - 一个 ResultSet对象.您需要遍历列表并查看.foo每个列表 .或者,如果您真的只想要一个结果,则需要使用find()而不是find_all().

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有