python python2 Come gestire la codifica della risposta da urllib.request.urlopen()




urlopen python2 (5)

urllib.urlopen(url).headers.getheader('Content-Type')

Produrrà qualcosa come questo:

text/html; charset=utf-8

Sto cercando di cercare una pagina web utilizzando le espressioni regolari, ma sto ricevendo il seguente errore:

TypeError: impossibile usare un modello di stringa su un oggetto simile a un byte

Capisco perché, urllib.request.urlopen () restituisce una puntata e quindi, almeno io sto indovinando, re non conosce la codifica da utilizzare. Cosa dovrei fare in questa situazione? C'è un modo per specificare il metodo di codifica in un urlrequest forse o dovrò ricodificare la stringa da solo? Se sì, cosa sto cercando di fare, presumo che dovrei leggere la codifica dalle informazioni dell'intestazione o il tipo di codifica, se specificato in html e quindi ricodificarlo in quel modo?


Per quanto mi riguarda, la soluzione è la seguente (python3):

resource = urllib.request.urlopen(an_url)
content =  resource.read().decode(resource.headers.get_content_charset())

dopo aver effettuato una richiesta req = urllib.request.urlopen(...) devi leggere la richiesta chiamando html_string = req.read() che ti darà la risposta stringa che puoi quindi analizzare come vuoi tu.


Hai solo bisogno di decodificare la risposta, utilizzando l'intestazione Content-Type genere l'ultimo valore. C'è un esempio dato anche nel tutorial .

output = response.decode('utf-8')

Ho avuto gli stessi problemi negli ultimi due giorni. Finalmente ho una soluzione. Sto usando il metodo info() dell'oggetto restituito da urlopen() :

req=urllib.request.urlopen(URL)
charset=req.info().get_content_charset()
content=req.read().decode(charset)






urllib