所以我几个小时前才开始编程,正在研究 Nathan Yau 的 Visualize This 中的一个示例。我使用 Python 3.3.4 和 BeautifulSoup4 进行我的第一个数据抓取练习。虽然这本书似乎使用的是 Python 2.x,但我已经设法找出更新的代码,以使用 wunderground.com 的历史数据完成我的第一个数据抓取练习:
>>> maxTemp = soup.findAll(attrs={"class":"nobr"})[5].span.string
>>> print(maxTemp)
结果应该是“37”。
我在我的第一个脚本中包含了这段代码,当我尝试从命令提示符运行它时,它启动了,但随后出现错误:
"AttributeError: 'NoneType' object has no attribute 'string'"
正如您所想象的,看到我的代码在 Python IDLE GUI 中而不是在脚本中运行良好是令人沮丧的。我四处寻找答案并尝试了不同的方法,但现在完全被卡住了。有什么建议吗?
编辑:为我的示例添加更多代码。这是来自失败的脚本:
url = "http://www.wunderground.com/history/airport/KBOS/2013/" + str(m) + "/" + str(d) + "DailyHistory.html"
page = urllib.request.urlopen(url)
# Get daily maximum temperature from page
soup = BeautifulSoup(page)
# maxTemp = soup.body.nobr.b.string
maxTemp = soup.findAll(attrs={"class":"nobr"})[5].span.string
同样,当我从我的终端运行它时它失败了:
C:\Python33>python get-weather-data.py
Getting data for 201311
Traceback (most recent call last)
File "get-weather-data.py", line 28, in (module)
maxTemp = soup.findAll(attrs={"class":"nobr"})[5].span.string
AttributeError: 'NoneType' object has no attribute 'string'
即使它在 IDLE 中工作正常:
import urllib.request
page = urllib.request.urlopen("http://www.wunderground.com/history/airport/KBOS/2013/1/1/DailyHistory.html")
from bs4 import BeautifulSoup
soup = BeautifulSoup(page)
maxTemp = soup.findAll(attrs={"class":"nobr"})[5].span.string
print(maxTemp)
请您参考如下方法:
我遇到了同样的问题。这是一本了不起的书,但该示例似乎是基于以前版本的 Beautiful Soup。如果您只是删除“.span”部分,它就会起作用。像这样:
maxTemp = soup.findAll(attrs={"class":"nobr"})[5].string
