2013-03-16 23 views
4

返回我有這樣的:提取數據由pycurl

import pycurl 
import pprint 
import json 

c = pycurl.Curl() 
c.setopt(c.URL, 'https://mydomainname.com') 

c.perform() 

上面的代碼返回一個字典是這樣的:

{"name":"steve", "lastvisit":"10-02-2012", "age":12} 

我要通過字典循環,得到的只是年齡:

age : 12 

我想:

diction = {} 
diction = c.perform() 
pprint.pprint(diction["age"]) 

無數據返回,我得到這個錯誤:

TypeError: 'NoneType' object is unsubscriptable 
+0

謝謝Metijn!任何想法如何獲得年齡? – mongotop 2013-03-16 19:22:37

+1

我假設你正在使用Python 3(由異常判斷,python 3.1或3.2)。 – 2013-03-16 19:35:05

回答

11

c.perform()不返回任何東西,你需要配置一個類文件對象捕捉值。一個BytesIO object會做,那麼你可以調用該.getvalue()調用完成後:

import pycurl 
import pprint 
import json 
from io import BytesIO 

c = pycurl.Curl() 
data = BytesIO() 

c.setopt(c.URL, 'https://mydomainname.com') 
c.setopt(c.WRITEFUNCTION, data.write) 
c.perform() 

dictionary = json.loads(data.getvalue()) 
pprint.pprint(dictionary["age"]) 

如果你不嫁給pycurl,你可能會發現requests要輕鬆很多:

import pprint 
import requests 

dictionary = requests.get('https://mydomainname.com').json() 
pprint.pprint(dictionary["age"]) 

即使標準庫urllib.request module將比使用更容易pycurl

from urllib.request import urlopen 
import pprint 
import json 

response = urlopen('https://mydomainname.com') 
dictionary = json.load(response) 
pprint.pprint(dictionary["age"]) 
+0

非常感謝你Metijn,我試了代碼,我得到這個錯誤:'AttributeError:getvalue' – mongotop 2013-03-16 19:26:20

+1

@mongotop:道歉,我沒有閱讀[文檔](http://pycurl.sourceforge.net/doc/ curlobject.html)足夠詳細。你爲什麼使用'pycurl'?爲什麼不使用更方便的庫? – 2013-03-16 19:27:54

+0

說實話,那是我知道的那個,你能否建議另外一個圖書館。 – mongotop 2013-03-16 19:29:44