2016-02-25 35 views
-1

我試圖從http://xkcd.com/info.0.json獲取信息。基本上它看起來像一個簡單的Python字典,這就是我想要轉換它。我當前的代碼是:如何將網站中的文字轉換爲字典?

import urllib.request 
with urllib.request.urlopen('http://xkcd.com/info.0.json') as response: 
    html = [response.read()] 
print(html) 

和輸出

[b'{"month": "2", "num": 1647, "link": "", "year": "2016", "news": "", "safe_title": "Diacritics", "transcript": "", "alt": "Using diacritics correctly is not my fort\\u00c3\\u00a9.", "img": "http:\\/\\/imgs.xkcd.com\\/comics\\/diacritics.png", "title": "Diacritics", "day": "24"}'] 

回答

2

你正在接受一個JSON編碼的響應。您可以分析與json.loads()功能:

import json 
import urllib.request 

with urllib.request.urlopen('http://xkcd.com/info.0.json') as response: 
    data = json.loads(response.read().decode('utf8')) 

>>> data 
{'link': '', 'transcript': '', 'month': '2', 'year': '2016', 'alt': 'Using diacritics correctly is not my forté.', 'num': 1647, 'img': 'http://imgs.xkcd.com/comics/diacritics.png', 'day': '24', 'safe_title': 'Diacritics', 'news': '', 'title': 'Diacritics'} 

這與requests模塊更容易:

import requests 
response = requests.get('http://xkcd.com/info.0.json') 
data = response.json() 

>>> data 
{'link': '', 'transcript': '', 'month': '2', 'year': '2016', 'alt': 'Using diacritics correctly is not my forté.', 'num': 1647, 'img': 'http://imgs.xkcd.com/comics/diacritics.png', 'day': '24', 'safe_title': 'Diacritics', 'news': '', 'title': 'Diacritics'} 

requests爲您節省解碼傳入的數據和JSON解碼的麻煩。

0

在Python 2.7中,您需要import urllib2然後import json將數據作爲Python字典加載到變量中。資源here

import urllib2 
import json 
response = urllib2.urlopen('http://xkcd.com/info.0.json') 
html = response.read().decode('utf8') 

data = json.loads(html) 
type(data) is dict # True