2019年4月2日 星期二

[ Python 文章收集 ] 用 Python 處理 HTML 轉義字符的 5 種方式

Source From Here 
Preface 
寫爬蟲是一個發送請求,提取數據,清洗數據,存儲數據的過程。在這個過程中,不同的數據源返回的數據格式各不相同,有 JSON 格式,有 XML 文檔,不過大部分還是 HTML 文檔,HTML 經常會混雜有轉移字符,這些字符我們需要把它轉義成真正的字符。 

什麼是 轉義字符 
在 HTML 中 <、>、& 等字符有特殊含義(<,> 用於標籤中,& 用於轉義),他們不能在 HTML 代碼中直接使用,如果要在網頁中顯示這些符號,就需要使用 HTML 的 轉義字符串Escape Sequence),例如 < 的轉義字符是 "<",瀏覽器渲染 HTML 頁面時,會自動把轉移字符串換成真實字符 (Online HTML Escape / Unescape): 


轉義字符(Escape Sequence)由三部分組成:第一部分是一個& 符號,第二部分是實體(Entity)名字,第三部分是一個分號, 例如: 


Python 反轉義字符串 
用 Python 來處理轉義字符串有多種方式,而且 py2 和 py3 中處理方式不一樣,在 Python2 中,反轉義串的模塊是 HTMLParser
>>> from HTMLParser import HTMLParser
>>> HTMLParser().unescape('<')
u'<'

Python3 HTMLParser 模塊遷移到了 html.parser 
>>> from html.parser import HTMLParser
>>> HTMLParser().unescape('>')
'>'

到 Python3.4 以後的版本,在 html 模塊新增了 unescape 方法。 
>>> import html
>>> html.unescape('&')
'&'

推薦最後一種寫法,因為 HTMLParser.unescape 方法在 Python3.4 就已經被廢棄掉不推薦使用了,意味著之後的版本會被徹底移除。另外,sax 模塊也有支持反轉義的函數 
>>> from xml.sax.saxutils import unescape, escape
>>> escape('<')
'<'
>>> unescape('<')
'<'

當然,你完全可以實現自己的反轉義功能,也不復雜,當然,我們崇尚不重複造輪子。 

Supplement 
Wiki - List of XML and HTML character entity references 
HTML Escape Characters: Complete List

沒有留言:

張貼留言

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...