我去!爬蟲遇到字體反爬,哭了-
今天準備爬取某某點評店鋪信息時,遇到了『字體』反爬。比如這樣的:
還有這樣的:
可以看到這些字體已經被加密(反爬)
竟然遇到這種情況,那我就帶大家如何去解決這類反爬(字體反爬類)
01 網頁分析
在開始分析反爬之前,先簡單的介紹一下背景(爬取的網頁)
辰哥爬取的某某點評的店鋪信息。一開始查看網頁源碼是這樣的
這種什麼也看不到,咱們換另一種方式:通過程序直接把整個網頁源代碼保存下來
獲取到的網頁源碼如下:
比如這裏看到評論數(4 位數)都有對應着一個編號(相同的數字編號相同),應該是對應着網站的字體庫。
下一步,我們需要找到這個網站的字體庫。
02 獲取字體庫
這裏的字體庫建議在目標網站裏面去獲取,因爲不同的網站的字體庫是不一樣,導致解碼還原的字體也會不一樣。
1、抓包獲取字體庫
在瀏覽器 network 裏面可以看到一共有三種字體庫。(三種字體庫各有不同的妙用,後面會有解釋)
把字體庫鏈接複製在瀏覽器裏面打開,就可以把字體庫下載到本地。
2、查看字體庫
這裏使用 FontCreator 的工具查看字體庫。
下載地址:
https://www.high-logic.com/font-editor/fontcreator/download
這裏需要註冊,郵箱驗證才能下載。
安裝之後,把剛剛下載的字體庫在 FontCreator 中打開
可以看到字體的內容以及對應的編號。
比如數字 7 對應 F399、** 數字 8 對應 F572 ,** 咱們在原網頁和源碼對比,是否如此???
可以看到,真是一模一樣對應着解碼就可以還原字體。
3、爲什麼會有三個字體庫
在查看加密字體的 CSS 樣式時,方式有 css 內容是這樣的
字體庫 1:d35c3812.woff 對應解碼 class 爲 shopNum
字體庫 2:084c9fff.woff 對應解碼 class 爲 reviewTag 和 address
字體庫 3:73f5e6f3.woff 對應解碼 class 爲 tagName
也就是說,字體所屬的不同 class 標籤,對應的解密字體庫是不一樣的,這裏不得不說一句:太雞賊了
咱們這裏獲取的評論數,clas 爲 shopNum,需要用到字體庫 d35c3812.woff
03 代碼實現解密
1、加載字體庫
既然我們已經知道了字體反爬的原理,那麼我們就可以開始編程實現解密還原。
加載字體庫的 Python 庫包是:fontTools ,安裝命令如下:
pip install fontTools
將字體庫的內容對應關係保存爲 xml 格式
code 和 name 是一一對應關係
可以看到網頁源碼中的編號後四位對應着字體庫的編號。
因此我們可以建立應該字體對應集合
建立好映射關係好,到網頁源碼中去進行替換
這樣我們就成功的將字體反爬處理完畢。後面提取內容大家基本都沒問題。
2、完整代碼
輸出結果:
可以看到加密的數字全部都還原了。
04 小結
本文中主要講解了如此處理字體反爬問題,並以某某點評爲例去實戰演示分析。文中處理的數字類型,大家可以嘗試去試試中文如何解決。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/iWkiBaewusWBkqEQBzkXXA