2017-08-23 6 views
0

Je suis en train d'obtenir et d'analyser une page Web qui contient des caractères non-ASCII (l'URL est http://www.one.co.il). Voilà ce que j'ai:Comment obtenir une page Web avec les caractères unicode en python

url = "http://www.one.co.il" 
req = urllib2.Request(url) 
response = urllib2.urlopen(req) 
encoding = response.headers.getparam('charset') # windows-1255 
html = response.read() # The length of this is valid - about 31000-32000, 
         # but printing the first characters shows garbage - 
         # '\x1f\x8b\x08\x00\x00\x00\x00\x00', instead of 
         # '<!DOCTYPE' 
html_decoded = html.decode(encoding) 

La dernière ligne me donne une exception:

File "C:/Users/....\WebGetter.py", line 16, in get_page 
    html_decoded = html.decode(encoding) 
File "C:\Python27\lib\encodings\cp1255.py", line 15, in decode 
    return codecs.charmap_decode(input,errors,decoding_table) 
UnicodeDecodeError: 'charmap' codec can't decode byte 0xdb in position 14: character maps to <undefined> 

J'ai essayé de regarder d'autres questions connexes telles que urllib2 read to Unicode et How to handle response encoding from urllib.request.urlopen(), mais n'a rien trouvé utile à ce sujet .

Quelqu'un peut-il s'il vous plaît faire la lumière et me guider dans ce sujet? Merci!

Répondre

1

0x1f 0x8b 0x08 est le nombre magique pour un fichier gzip. Vous devrez le décompresser avant de pouvoir utiliser le contenu.

+0

Y a-t-il d'autres « surprises » que je devrais rechercher dans les réponses? Y a-t-il un moyen d'obtenir de manière transparente une page incluant tout le post-traitement nécessaire, de sorte que je le vois comme dans la vue-source de Chrome? –

+0

Je suis sûr que quelqu'un a géré cela. Regarde autour de toi. –