2014-10-26 95 views
0

我使用Readability Parser API從網頁中提取內容。它是確定當網頁是在拉丁字符集,但是當我提取西里爾文章,它具有下列結束:Python - 將unicode十六進制轉換爲字符串

<div>&#x412;&#x432;&#x43E;&#x441;&#x43A;&#x440;&#x435;&#x441;&#x435;&#x43D;&#x44C;</div>...etc 

有趣的下面是一個網頁的標題是正確提取在西里爾文,但不是內容。我的嘗試是做到以下幾點,因爲它在這個SO answer建議:

content = unicodedata.normalize('NFKD', content).encode('ascii','ignore') 

,但沒有奏效。你能告訴我在保存到數據庫之前是否有辦法轉換這個字符串?

請讓我知道,如果我的問題的標題正確解釋我需要什麼。謝謝。

回答

2

單向(Python的3.3):

>>> s='<div>&#x412;&#x432;&#x43E;&#x441;&#x43A;&#x440;&#x435;&#x441;&#x435;&#x43D;&#x44C;</div>' 
>>> import html.parser 
>>> h=html.parser.HTMLParser() 
>>> h.unescape(s) 
'<div>Ввоскресень</div>' 

的Python 2.7:

>>> s='<div>&#x412;&#x432;&#x43E;&#x441;&#x43A;&#x440;&#x435;&#x441;&#x435;&#x43D;&#x44C;</div>' 
>>> import HTMLParser 
>>> h=HTMLParser.HTMLParser() 
>>> print(h.unescape(s)) 
<div>Ввоскресень</div> 

P.S.我去尋找文檔鏈接,它看起來像unescape沒有記錄。這裏有一個方法,而無需使用未公開的API:

>>> re.sub(r'&#x(.*?);',lambda x: chr(int(x.group(1),16)),s) 
'<div>Ввоскресень</div>' 

根據註釋它看起來終於證明(和移動)在Python 3.4:

+0

非常感謝你,我真的很感激它!我只會補充說h.parser.unescape已被棄用(Python 3.5),所以我使用了html.unescape()。 – nickbusted 2014-10-27 01:19:58

相關問題