2013-03-16 5 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

+1

Я предполагаю, что вы используете Python 3 (судя по исключению, python 3.1 или 3.2). –

ответ

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

+1

@mongotop: Извинения, я не читал [документацию] (http://pycurl.sourceforge.net/doc/ curlobject.html) достаточно подробно. Почему вы используете 'pycurl'? Почему бы не использовать более удобную библиотеку? –

+0

Чтобы быть честным, это тот, о котором я знаю, можете ли вы предложить другую библиотеку. – mongotop

Смежные вопросы