Python:AttributeError:'NoneType'对象没有属性'string',尽管在IDLE中工作

时间:2014-02-14 01:34:34

标签: python python-3.x

所以我几个小时前就开始编程,从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)

2 个答案:

答案 0 :(得分:1)

我有同样的问题。这是一本了不起的书,但似乎这个例子是基于之前版本的Beautiful Soup。如果你放弃" .span"它会起作用。部分。像这样:

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

答案 1 :(得分:0)

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