2012-04-06 53 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