2012-04-06 4 views
2

Ich versuche, ein Segment einer Website zu holen. Das Skript funktioniert, aber es ist eine Website, die Akzente wie á, é, í, ó, ú hat.urllib: get utf-8 codierte Website Quellcode

Wenn ich die Site mit urllib oder urllib2 abrufe, ist der Site-Quellcode nicht in utf-8 codiert, was ich gerne hätte, da utf-8 diese Akzente unterstützt.

Ich glaube, dass die Zielstelle in utf-8 codiert wird, wie es den folgenden Meta-Tag enthält:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

Mein Python-Skript:

opener = urllib2.build_opener() 
opener.addheaders = [('Accept-Charset', 'utf-8')] 
url_response = opener.open(url) 
deal_html = url_response.read().decode('utf-8') 

aber ich halte das Erzielen von Ergebnissen, die aussehen wie sie nicht un utf-8 codiert sind.

Z. B: "Milán" auf der Website = "Mil \ xe1n" nach urllib2 es holt

Irgendwelche Vorschläge?

Antwort

2

Ihr Skript funktioniert ordnungsgemäß. Die "\xe1" Zeichenfolge ist die Darstellung des Objekts unicode, das aus der Decodierung resultiert. Zum Beispiel:

>>> "Mil\xc3\xa1n".decode('utf-8') 
u'Mil\xe1n' 

Die "\xc3\xa1" Sequenz ist die UTF-8 Sequenz für leter ein mit diakritischen Zeichen: á.

+0

Ok, ich sehe jetzt, dass, wenn ich "Mil \ xc3 \ xa1n" drucke, Milán zurückgibt, was perfekt ist. Wenn ich jedoch Strings aus dem Quellcode abrufe und sie an eine Liste angehängt habe, bekomme ich "Mil \ xc3 \ xa1n". Wie kann ich dies lesbar (d. H. Milán) in der Liste oder im Wörterbuch machen? –

+1

Die Liste ruft 'repr()' auf jedem der Elemente auf, weshalb die erweiterten Zeichen maskiert werden. Wenn Sie eine besser lesbare Darstellung für Debugging-Zwecke benötigen, tun Sie einfach etwas wie '[str (x) für x in meiner Liste]'. – kindall