爬蟲遇到字體反爬,哭了
大家好,我是辰哥
今天準(zhǔn)備爬取某某點(diǎn)評店鋪信息時(shí),遇到了『字體』反爬。比如這樣的:
還有這樣的:
可以看到這些字體已經(jīng)被加密(反爬)
竟然遇到這種情況,那辰哥就帶大家如何去解決這類反爬(字體反爬類)
01網(wǎng)頁分析
在開始分析反爬之前,先簡單的介紹一下背景(爬取的網(wǎng)頁)
辰哥爬取的某某點(diǎn)評的店鋪信息。一開始查看網(wǎng)頁源碼是這樣的
這種什么也看不到,咱們換另一種方式:通過程序直接把整個(gè)網(wǎng)頁源代碼保存下來
獲取到的網(wǎng)頁源碼如下:
比如這里看到評論數(shù)(4位數(shù))都有對應(yīng)著一個(gè)編號(相同的數(shù)字編號相同),應(yīng)該是對應(yīng)著網(wǎng)站的字體庫。
下一步,我們需要找到這個(gè)網(wǎng)站的字體庫。
02獲取字體庫
這里的字體庫建議在目標(biāo)網(wǎng)站里面去獲取,因?yàn)椴煌木W(wǎng)站的字體庫是不一樣,導(dǎo)致解碼還原的字體也會(huì)不一樣。
1、抓包獲取字體庫
在瀏覽器network里面可以看到一共有三種字體庫。(三種字體庫各有不同的妙用,后面會(huì)有解釋)
把字體庫鏈接復(fù)制在瀏覽器里面打開,就可以把字體庫下載到本地。
2、查看字體庫
這里使用FontCreator的工具查看字體庫。
下載地址:
- https://www.high-logic.com/font-editor/fontcreator/download
這里需要注冊,郵箱驗(yàn)證才能下載,不過辰哥已經(jīng)下載了,可以在公眾號回復(fù):FC,獲取安裝包。
安裝之后,把剛剛下載的字體庫在FontCreator中打開
可以看到字體的內(nèi)容以及對應(yīng)的編號。
比如數(shù)字7對應(yīng)F399、數(shù)字8對應(yīng)F572 ,咱們在原網(wǎng)頁和源碼對比,是否如此???
可以看到,真是一模一樣對應(yīng)著解碼就可以還原字體。
3、為什么會(huì)有三個(gè)字體庫
在查看加密字體的CSS樣式時(shí),方式有css內(nèi)容是這樣的
字體庫1:d35c3812.woff 對應(yīng)解碼class為 shopNum
字體庫2:084c9fff.woff 對應(yīng)解碼class為 reviewTag和address
字體庫3:73f5e6f3.woff 對應(yīng)解碼class為 tagName
也就是說,字體所屬的不同class標(biāo)簽,對應(yīng)的解密字體庫是不一樣的,辰哥這里不得不說一句:太雞賊了
咱們這里獲取的評論數(shù),clas為shopNum,需要用到字體庫d35c3812.woff
03代碼實(shí)現(xiàn)解密
1、加載字體庫
既然我們已經(jīng)知道了字體反爬的原理,那么我們就可以開始編程實(shí)現(xiàn)解密還原。
加載字體庫的Python庫包是:fontTools ,安裝命令如下:
- pip install fontTools
將字體庫的內(nèi)容對應(yīng)關(guān)系保存為xml格式
code和name是一一對應(yīng)關(guān)系
可以看到網(wǎng)頁源碼中的編號后四位對應(yīng)著字體庫的編號。
因此我們可以建立應(yīng)該字體對應(yīng)集合
建立好映射關(guān)系好,到網(wǎng)頁源碼中去進(jìn)行替換
這樣我們就成功的將字體反爬處理完畢。后面提取內(nèi)容大家基本都沒問題。
2、完整代碼
輸出結(jié)果:
可以看到加密的數(shù)字全部都還原了。
04小結(jié)
辰哥在本文中主要講解了如此處理字體反爬問題,并以某某點(diǎn)評為例去實(shí)戰(zhàn)演示分析。辰哥在文中處理的數(shù)字類型,大家可以嘗試去試試中文如何解決。
本文轉(zhuǎn)載自微信公眾號「Python研究者」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Python研究者公眾號。