94

Pythonを使用してURLを取得しようとしていますが、応答はJSONです。しかし、私が走ると

import urllib2
response = urllib2.urlopen('https://api.instagram.com/v1/tags/pizza/media/XXXXXX')
html=response.read()
print html

htmlはstr型で、JSONを期待しています。strの代わりにJSONまたはPython辞書として応答をキャプチャする方法はありますか?

4

10 に答える 10

187

URL が有効な JSON エンコード データを返している場合は、jsonライブラリを使用してそれをデコードします。

import urllib2
import json

response = urllib2.urlopen('https://api.instagram.com/v1/tags/pizza/media/XXXXXX')
data = json.load(response)   
print data
于 2012-12-17T20:47:46.390 に答える
39
import json
import urllib

url = 'http://example.com/file.json'
r = urllib.request.urlopen(url)
data = json.loads(r.read().decode(r.info().get_param('charset') or 'utf-8'))
print(data)

urllib、Python 3.4
HTTPMessageの場合、 r.info() によって返されます

于 2014-03-20T10:47:05.123 に答える
4

検証などには注意してください。ただし、直接的な解決策は次のとおりです。

import json
the_dict = json.load(response)
于 2012-12-17T20:47:42.397 に答える
0

すでに回答されていると思いますが、これに少し追加したいと思います

import json
import urllib2
class Website(object):
    def __init__(self,name):
        self.name = name 
    def dump(self):
     self.data= urllib2.urlopen(self.name)
     return self.data

    def convJSON(self):
         data=  json.load(self.dump())
     print data

domain = Website("https://example.com")
domain.convJSON()

注: json.load() に渡されるオブジェクトは.read ()をサポートする必要があるため、urllib2.urlopen(self.name).read()は機能しません。渡されたドメインは、この場合httpのプロトコルで提供する必要があります

于 2017-01-12T06:42:07.967 に答える
-1

ここで提供されている例はどれも私にとってはうまくいきませんでした。それらは Python 2 (uurllib2) 用であるか、Python 3 用であり、「ImportError: No module named request」というエラーを返します。エラーメッセージをグーグルで調べたところ、モジュールをインストールする必要があるようです。これは、このような単純なタスクには明らかに受け入れられません。

このコードは私のために働いた:

import json,urllib
data = urllib.urlopen("https://api.github.com/users?since=0").read()
d = json.loads(data)
print (d)
于 2016-02-23T19:56:33.697 に答える