2014-02-14 42 views
2

所以我剛開始編程幾個小時前,從Nathan Yau的Visualize This開始編寫一個例子。我使用Python 3.3.4和BeautifulSoup4進行第一次數據刮擦練習。儘管這本書好像是用Python 2.x中,我已經設法找出更新的代碼來完成利用wunderground.com歷史數據我的第一個數據刮練習:Python:AttributeError:'NoneType'對象沒有屬性'string',儘管在IDLE中工作

>>> 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) 
+1

你正在試圖獲得''從soup.findAll(ATTRS = { 「類」: 「NOBR」}).string' [5] .span',但後者被設置爲「沒有」,而不是你期望的。爲什麼這是這種情況,很難說。你應該發佈一個完整的例子,而不是一行。 – Carpetsmoker

+0

我增加了一些更多的例子,但我不知道它有多大的幫助。我的假設是「字符串」指的是(第一個跨度是nobr類的第六個實例)內可能存在的任何字符串。 IDLE GUI將返回網站上顯示的值「37」,這表明它是某種東西,而不是「無」。但是你是否建議我必須告訴腳本「字符串」意味着什麼,比如「通過字符串,Python,我的意思是指任何字符在那裏」? – RemsNeato

回答

0

您可以嘗試閱讀網頁,將內容轉儲到文件中,並比較IDLE與腳本方案的文件內容。它可能是頁面內容實際上是不同的 - 你看到的差異可能是正確的。這樣做有助於縮小可能的原因。

+0

謝謝,我會試試看! – RemsNeato

1

我有同樣的問題。這本書很棒,但看起來這個例子是基於以前版本的美麗湯。如果您放棄「.span」部分,它將起作用。像這樣:

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

正義!謝啦! – RemsNeato