Python字體反爬實(shí)戰(zhàn)案例分享
實(shí)戰(zhàn)場(chǎng)景
本篇博客學(xué)習(xí)字體反爬,涉及的站點(diǎn)是實(shí)習(xí) x,目標(biāo)站點(diǎn)地址直接百度搜索即可。

可以看到右側(cè)源碼中出現(xiàn)了很多“亂碼”,這其中就包含了關(guān)鍵信息。
接下來(lái)按照常規(guī)的套路,在開發(fā)者工具中檢索字體相關(guān)信息,但是篩選之后,并沒有得到反爬的字體,只有一個(gè) file? 有些許的可能性。

這里就是一種新鮮的場(chǎng)景了,如果判斷不準(zhǔn),那只能用字體樣式和字體標(biāo)簽名進(jìn)行判斷了。
在網(wǎng)頁(yè)源碼中檢索 @font-face 和 myFont,得到下圖內(nèi)容,這里發(fā)現(xiàn) file 字體又出現(xiàn)了,看來(lái)解決問題的關(guān)鍵已經(jīng)出現(xiàn)了。

下載文件名之后發(fā)現(xiàn)無(wú)后綴名,我們可以補(bǔ)上一個(gè) .ttf 的后綴,接下來(lái)拖拽到 FontCreator 中,然后進(jìn)行查閱。

二次刷新頁(yè)面之后,再次獲取一個(gè) file 文件,查看二者是否有編碼變化問題。
結(jié)論:每次請(qǐng)求字體文件,得到的響應(yīng)無(wú)變化。
既然沒有變化,后續(xù)的字體反爬實(shí)戰(zhàn)編碼就變的簡(jiǎn)單了。
實(shí)戰(zhàn)編碼
解析字體文件,獲取編碼與字符。
from fontTools.ttLib import TTFont
font1 = TTFont('./fonts/file.ttf')
keys,values = [],[]
for k, v in font1.getBestCmap().items():
print(k,v)
得到的結(jié)果如下所示:
2 extra bytes in post.stringData array
120 x
57345 uni4E00
57360 uni77
57403 uni56
……
然后我們查看一下實(shí)習(xí)僧站點(diǎn)返回的數(shù)據(jù)。
-
這其中又涉及到了編碼的轉(zhuǎn)換。
我們拿到一段帶編碼的文字,如下所示:
銷售實(shí)習(xí)
接下來(lái)查看一下頁(yè)面呈現(xiàn)的文字
SaaS軟件銷售實(shí)習(xí)生
其中  對(duì)應(yīng)的是 S 字符,再看一下該字符在字體文件中的編碼,如下所示。

但是從剛才的結(jié)果中,并未得到 edb3 相關(guān)值,但是把十進(jìn)制的編碼進(jìn)行轉(zhuǎn)換之后,得到下述結(jié)果。

到此這篇關(guān)于Python字體反爬實(shí)戰(zhàn)案例分享的文章就介紹到這了,更多相關(guān)Python字體反爬 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中時(shí)間類型的JSON數(shù)據(jù)轉(zhuǎn)換
在Python中,處理時(shí)間和日期數(shù)據(jù)以及與JSON數(shù)據(jù)的相互轉(zhuǎn)換是常見的任務(wù),本文主要為大家詳細(xì)如何在Python中處理時(shí)間類型的JSON數(shù)據(jù)轉(zhuǎn)換,需要的小伙伴可以參考下2024-02-02
Python基于DB-API操作MySQL數(shù)據(jù)庫(kù)過程解析
這篇文章主要介紹了Python基于DB-API操作MySQL數(shù)據(jù)庫(kù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Python下調(diào)用Linux的Shell命令的方法
有時(shí)候難免需要直接調(diào)用Shell命令來(lái)完成一些比較簡(jiǎn)單的操作,這篇文章主要介紹了Python下調(diào)用Linux的Shell命令的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-06-06
Python中urllib2模塊的8個(gè)使用細(xì)節(jié)分享
這篇文章主要介紹了Python中urllib2模塊的8個(gè)使用細(xì)節(jié)分享,本文講解了Proxy設(shè)置、Timeout設(shè)置、加入特定Header、Redirect、Cookie、PUT和DELETE方法等內(nèi)容,需要的朋友可以參考下2015-01-01
Python利用多線程枚舉實(shí)現(xiàn)獲取wifi信息
這篇文章主要為大家詳細(xì)介紹了Python如何利用枚舉字典的方式來(lái)實(shí)現(xiàn)獲取wifi信息,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-12-12
uwsgi啟動(dòng)django項(xiàng)目的實(shí)現(xiàn)步驟
本文主要介紹了uwsgi啟動(dòng)django項(xiàng)目的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08
Python文件系統(tǒng)模塊pathlib庫(kù)
這篇文章介紹了Python中的文件系統(tǒng)模塊pathlib庫(kù),文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
使用Python腳本來(lái)控制Windows Azure的簡(jiǎn)單教程
這篇文章主要介紹了使用Python腳本來(lái)控制Windows Azure的簡(jiǎn)單教程,由于微軟官方提供了Python SDK,使得用戶自己用Python控制Azure成為了可能,需要的朋友可以參考下2015-04-04

