Sto cercando di ottenere l'intestazione da un sito Web, la codifica in JSON per scriverlo in un file. Ho provato due modi diversi senza successo.Ottieni un'intestazione con Python e converti in JSON (richieste - urllib2 - json)
PRIMO con urllib2 e JSON
import urllib2
import json
host = ("https://www.python.org/")
header = urllib2.urlopen(host).info()
json_header = json.dumps(header)
print json_header
in questo modo ottengo l'errore:
TypeError: is not JSON serializable
così cerco di aggirare questo problema convertendo l'oggetto in una stringa -> json_header = str (intestazione) In questo modo posso json_header = json.dumps (intestazione), ma l'uscita è strano:
"Date: Wed, 02 Jul 2014 13:33:37 GMT\r\nServer: nginx\r\nContent-Type: text/html; charset=utf-8\r\nX-Frame-Options: SAMEORIGIN\r\nContent-Length: 45682\r\nAccept-Ranges: bytes\r\nVia: 1.1 varnish\r\nAge: 1263\r\nX-Served-By: cache-fra1220-FRA\r\nX-Cache: HIT\r\nX-Cache-Hits: 2\r\nVary: Cookie\r\nStrict-Transport-Security: max-age=63072000; includeSubDomains\r\nConnection: close\r\n"
secondo con richieste
import requests
r = requests.get(“https://www.python.org/”)
rh = r.headers
print rh
{'content-length': '45682', 'via': '1.1 varnish', 'x-cache': 'HIT', 'accept-ranges': 'bytes', 'strict-transport-security': 'max-age=63072000; includeSubDomains', 'vary': 'Cookie', 'server': 'nginx', 'x-served-by': 'cache-fra1226-FRA', 'x-cache-hits': '14', 'date': 'Wed, 02 Jul 2014 13:39:33 GMT', 'x-frame-options': 'SAMEORIGIN', 'content-type': 'text/html; charset=utf-8', 'age': '1619'}
In questo modo l'uscita è più JSON simile ma ancora non OK (vedere la ‘‘invece di ““e altre cose come i = e;). Evidentemente c'è qualcosa (o molto) che non sto facendo nel modo giusto. Ho provato a leggere la documentazione dei moduli ma non riesco a capire come risolvere questo problema. Grazie per il vostro aiuto.
Grazie mille @Slater Tyranus. Il tuo secondo metodo è esattamente quello che stavo cercando. Solo una domanda per curiosità. Leggendo l'output del tuo primo metodo vedo che chiavi e valori sono dentro ''. Perché json.dumps lo fa in quel caso? Se un formato JSON valido ha valori all'interno di ""? –