Python爬蟲之自定義字體加密

反爬原理

利用字體文件,對顯示的字體進行修改,使得頁面中為標準字體而html代碼中的字體為亂碼形態(tài)。

破解原理

找到字體文件,找到字體文件中,每個字對應的字典,然后對HTML代碼中的亂碼進行替換。

目標網(wǎng)站

https://book.qidian.com/info/1021578238@Anzw

爬取思路

1、找到目標網(wǎng)站的請求方式
2、確定爬取文件
3、找到加密字體
4、爬取數(shù)據(jù)

爬取步驟

1、通過f12開發(fā)者工具找到請求頁面,查看頁面信息,確定請求為GET請求



2、找到要爬取的數(shù)據(jù),發(fā)現(xiàn)是一堆亂碼,無法正確讀出數(shù)字
3、根據(jù)span標簽的class屬性到css中找到定義的css,從中可以找到字體文件名


4、按CTRL + shift +f 進行全局搜索文件名(本次文件名為ttDVCePS)文件名可能隨時變動的


5、點擊搜索到的結(jié)果可以進入到html詳情頁面


6、在詳情頁中再次搜索文件名,找到文件位置,向后在次找到(.ttf)字體文件的文件的url,下載字體文件。字體加密所對用的字典都在這個文件中。



7、python 可以利用TTFont打開字體文件,然后對字體文件進行操作,操作如下:
7.1、安裝TTFont
pip install fontTools
7.2 導入TTFont模塊
from fontTools.ttLib import TTFont
7.3 把 .ttf文件修改格式保存為xml文件
TTFont('文件名')用來打開.ttf文件,其中saveXML()用來保存為xml格式的文件

a = TTFont('RyCKowTQ.ttf')
a.saveXML('a.xml')

8、打開.xml文件,(瀏覽器、sublime、pycharm都可以打開)找到文字,id為正常文字,name為加密后的值,選一個name在文件中進行搜索


9、搜索到網(wǎng)頁中顯示的字體,code就是網(wǎng)頁中對應的值。所有對應都在<cmap></cmap>中



10、利用Python提取cmap中對應的字典
aa['cmap'].getBestCmap()



11、根據(jù)得到的字典對頁面加密字體進行替換
12、注意。如果頁面字體文件每次請求都不一樣。需要在請求頁面時采用session進行請求,在用session對字體文件進行下載。下載的文件可以不用保存到本地,使用io.BytesIO保存到內(nèi)存中即可。

如果字體文件不變,則可以把字體字典直接保存下來。

#coding:utf-8
import sys
import requests,io
from fontTools.ttLib import TTFont
seeion = requests.session()
url = 'https://qidian.gtimg.com/qd_anti_spider/CultUYUT.ttf'
a = seeion.get(url)
aa = TTFont(io.BytesIO(a.content))
a = TTFont('RyCKowTQ.ttf')
a.saveXML('a.xml')
bb = aa['cmap'].getBestCmap()
print(bb)
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容