我去!爬蟲遇到字型反爬,哭了

Python研究者發表於2021-06-07

今天準備爬取某某點評店鋪資訊時,遇到了『字型』反爬。比如這樣的:

還有這樣的:

可以看到這些字型已經被加密反爬

竟然遇到這種情況,那辰哥就帶大家如何去解決這類反爬(字型反爬類

01 網頁分析

在開始分析反爬之前,先簡單的介紹一下背景(爬取的網頁)

辰哥爬取的某某點評的店鋪資訊。一開始檢視網頁原始碼是這樣的

這種什麼也看不到,我們們換另一種方式:通過程式直接把整個網頁原始碼儲存下來

獲取到的網頁原始碼如下:

比如這裡看到評論數(4位數)都有對應著一個編號(相同的數字編號相同),應該是對應著網站的字型庫

下一步,我們需要找到這個網站的字型庫。

02 獲取字型庫

這裡的字型庫建議在目標網站裡面去獲取,因為不同的網站的字型庫是不一樣,導致解碼還原的字型也會不一樣。

1、抓包獲取字型庫

在瀏覽器network裡面可以看到一共有三種字型庫。(三種字型庫各有不同的妙用,後面會有解釋

把字型庫連結複製在瀏覽器裡面開啟,就可以把字型庫下載到本地。

2、檢視字型庫

這裡使用FontCreator的工具檢視字型庫。

下載地址:

https://www.high-logic.com/font-editor/fontcreator/download

這裡需要註冊,郵箱驗證才能下載,不過辰哥已經下載了,可以在公眾號回覆:FC,獲取安裝包。

安裝之後,把剛剛下載的字型庫在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 小結

辰哥在本文中主要講解了如此處理字型反爬問題,並以某某點評為例去實戰演示分析。辰哥在文中處理的數字型別,大家可以嘗試去試試中文如何解決。

為了大家方便學習,辰哥已經把本文的完整原始碼上傳,需要的在公眾後臺回覆:字型反爬

不明白的地方可以在下方留言,一起交流。

相關文章