很多網站都使用了字體庫對數據進行加密,即頁面源碼中的數據與顯示出來的數據不一樣。html
實現的效果和昨天發佈的那篇關於 X 薯中文網的效果相似,可是原理大不相同。web
在字體加密的網站中用戶也是沒法直接進行復制網頁內容的。svg
目前有使用字體加密的網站大概有下面這些:字體
58同城,起點,貓眼,大衆點評,啓信寶,天眼查,實習僧,汽車之家
既然這麼多的網站都採用了字體加密,那麼它必定是一個有效的反爬手段,做爲爬蟲工程師咱們應該如何應對呢?網站
首先咱們應該先了解一下什麼是字體加密。google
網頁字體是一個字形集合,而每一個字形是描述字母或符號的矢量形狀。加密
所以,特定字體文件的大小由兩個簡單變量決定:每一個字形矢量路徑的複雜程度和特定字體中字形的數量。code
通俗一點,同一內容的網頁字體每一個字形應該都是大同小異的,咱們能夠經過比對字體文件的字形來確認映射的內容。orm
關於字體加密的描述文章實在太多了,我的建議仍是看看 Google 官方關於網頁字體的文章。
https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/webfont-optimization?hl=zh-cn
接着是關於網頁字體加密映射的原理圖,下圖來自穀雨解字:
https://guyujiezi.com/
在爬蟲爬取頁面的時候,頁面中的代碼是陰書,可是在人眼看到的是原文,這樣的映射關係讓爬蟲沒法順利爬取到網站內容。
經過上面的字體加密原理圖,咱們大概瞭解到字體加密的原理。
我推薦沒有搞過字體加密的朋友找個比較簡單的網站練手,網上寫的比較多的例子是貓眼的專業版。
貓眼的字體解密文章很是多,建議沒有接觸過得朋友能夠先本身動手試試,鹹魚也會在以後更新字體解密系列的文章。
下面是字體解密的大體流程:
先找到字體文件的位置,查看源碼大概就是xxx.tff這樣的文件
重複上面那個操做,將兩個字體文件保存下來
用上面的軟件或者網址打開,而且經過 Python fontTools 將 tff 文件解析爲 xml 文件
根據字體文件解析出來的 xml 文件與相似上面的字體界面找出相同內容的映射規律(重點)
鹹魚這裏直接上資源的連接。
一是查看字體的軟件 FontCreator,支持 window 。
連接:https://pan.baidu.com/s/1tUznnSB3siI2rVY9Whv88A 密碼:ygz9
二是打開字體的網站,適合 mac 系統的朋友使用。
先經過 cloudconvert 把字體文件轉化爲 svg 後再用 fontello 打開查看
http://fontello.com/ https://cloudconvert.com/ttf-to-svg
若是嫌棄上面轉換太過麻煩能夠用百度字體打開。
http://fontstore.baidu.com/static/editor/index.html
鹹魚推薦使用 FontCreator 以及百度字體。
打開後顯示的樣子與下圖相似。
EOF