2012-04-06 89 views
2

我试图抓取一些网站的一部分。该脚本有效,但它是一个有á,é,í,ó,ú等口音的网站。urllib:获取utf-8编码的网站源代码

当我使用urllib或urllib2获取网站时,网站源代码不是用utf-8编码的,我希望它是utf-8支持这些重音符号。

我相信目标网站是UTF-8,因为它包含了以下meta标签编码:

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

我的Python脚本:看起来

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

不过,我不断收到结果就像他们没有编码un utf-8一样。

E.g: “米兰” 的网站= “军用\ xe1n” 后的urllib2获取它

有什么建议?

回答

2

您的脚本工作正常。 "\xe1"字符串是解码产生的unicode对象的表示形式。例如:

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

"\xc3\xa1"序列是福斯产品带有音调符号标记的UTF-8序列:a。

+0

好吧,我现在看到,当我打印“Mil \ xc3 \ xa1n”时,它返回Milán,这是完美的。但是,当我从源代码中获取字符串并将它们追加到列表中时,我会得到“Mil \ xc3 \ xa1n”。我怎样才能使这个可读的(即米兰)在列表或字典? – 2012-04-06 21:16:39

+1

该列表调用其中每个项目上的'repr()',这就是扩展字符被转义的原因。如果你需要一个更易读的表示来进行调试,只需要像'[str(x)for m in mylist]'。 – kindall 2012-04-06 22:20:39