Saya mencoba MENDAPATKAN URL menggunakan Python dan responsnya adalah JSON. Namun, saat saya lari
import urllib2
response = urllib2.urlopen('https://api.instagram.com/v1/tags/pizza/media/XXXXXX')
html=response.read()
print html
Html adalah tipe str dan saya mengharapkan JSON. Apakah ada cara saya dapat menangkap respons sebagai JSON atau kamus python alih-alih str.
response.read()
mengembalikan string JSON yang valid?Jawaban:
Jika URL menampilkan data yang dikodekan JSON yang valid, gunakan
json
perpustakaan untuk mendekodekan bahwa:import urllib2 import json response = urllib2.urlopen('https://api.instagram.com/v1/tags/pizza/media/XXXXXX') data = json.load(response) print data
sumber
response
memberi Anda bytestrings, danjson.load()
mengharapkan untuk membaca bytestring. JSON harus dienkode menggunakan codec UTF, dan yang di atas berfungsi untuk UTF-8, UTF-16, dan UTF-32, asalkan titik kode BOM disertakan untuk dua codec terakhir. Jawaban yang Anda tautkan ke anggapan UTF-8 digunakan, yang biasanya benar karena itulah defaultnya. Mulai Python 3.6,json
pustaka otomatis mendekode bytecode dengan data JSON asalkan pengkodean UTF digunakan.requests
pustaka, yang juga secara otomatis mendeteksi codec UTF yang benar untuk digunakan dalam kasus di mana BOM hilang dan tidak ada kumpulan karakter yang ditentukan di header respons. Gunakan sajaresponse.json()
metodenya.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 , untuk Python 3.4
HTTPMessage , dikembalikan oleh r.info ()
sumber
print data
salah untuk Python 3. Seharusnyaprint(data)
.import urllib.request
. Selain itu, file .json tersebut di url sudah tidak ada lagi.""" Return JSON to webpage Adding to wonderful answer by @Sanal For Django 3.4 Adding a working url that returns a json (Source: http://www.jsontest.com/#echo) """ import json import urllib url = 'http://echo.jsontest.com/insert-key-here/insert-value-here/key/value' respons = urllib.request.urlopen(url) data = json.loads(respons.read().decode(respons.info().get_param('charset') or 'utf-8')) return HttpResponse(json.dumps(data), content_type="application/json")
sumber
from django.http import JsonResponse return JsonResponse({'key':'value'})
Hati-hati dengan validasi dan lain-lain, tetapi solusi langsungnya adalah ini:
import json the_dict = json.load(response)
sumber
resource_url = 'http://localhost:8080/service/' response = json.loads(urllib2.urlopen(resource_url).read())
sumber
Perpustakaan standar Python 3 satu baris:
load(urlopen(url)) # imports (place these above the code before running it) from json import load from urllib.request import urlopen url = 'https://jsonplaceholder.typicode.com/todos/1'
sumber
Meskipun saya kira itu sudah menjawab, saya ingin menambahkan sedikit saya dalam hal ini
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()
Catatan: objek yang diteruskan ke json.load () harus mendukung .read () , oleh karena itu urllib2.urlopen (self.name) .read () tidak akan berfungsi. Doamin pass harus dilengkapi dengan protokol dalam hal ini http
sumber
Anda juga bisa mendapatkan json dengan menggunakan
requests
seperti di bawah ini:import requests r = requests.get('http://yoursite.com/your-json-pfile.json') json_response = r.json()
sumber
Ini adalah solusi lain yang lebih sederhana untuk pertanyaan Anda
dimana data adalah keluaran str dari kode berikut
response = urlopen("https://data.nasa.gov/resource/y77d-th95.json") json_data = response.read().decode('utf-8', 'replace')
sumber
Tak satu pun dari contoh yang diberikan di sini berhasil untuk saya. Mereka baik untuk Python 2 (uurllib2) atau Python 3 mengembalikan kesalahan "ImportError: Tidak ada modul bernama permintaan". Saya google pesan kesalahan dan tampaknya mengharuskan saya untuk menginstal modul - yang jelas tidak dapat diterima untuk tugas yang begitu sederhana.
Kode ini berfungsi untuk saya:
import json,urllib data = urllib.urlopen("https://api.github.com/users?since=0").read() d = json.loads(data) print (d)
sumber
urllib.urlopen
;urlopen
ada di dalamurllib.request
modul.