Python:AttributeError:'NoneType'对象没有属性"字符串",尽管在 IDLE 中工作



所以我几个小时前刚刚开始编程,正在处理Nathan Yau的Visualize This中的一个示例。我使用Python 3.3.4和BeautifulSoup4进行第一次数据抓取练习。虽然这本书似乎使用的是Python2.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)

我遇到了同样的问题。这是一本了不起的书,但这个例子似乎是基于前一版本的《美丽的汤》。只要去掉".span"部分就行了。像这样:

maxTemp = soup.findAll(attrs={"class":"nobr"})[5].string

您可以尝试读取网页,将内容转储到文件中,并比较IDLE与脚本场景的文件内容。这可能是页面内容实际上不同——其中你看到的差异可能是正确的。这样做将有助于缩小可能的原因。

最新更新