字體反爬蟲的原理和破解方法
大家好,我是志斌~
之前給大家介紹了一種SVG映射反爬蟲,今天在給大家介紹另外一種通過映射關(guān)系來進(jìn)行反爬蟲的方式。
不知道大家有沒有遇到過這種情況,在寫爬蟲程序之前我們需要對目標(biāo)數(shù)據(jù)進(jìn)行觀察,但是在我們觀察時發(fā)現(xiàn)目標(biāo)數(shù)據(jù)在網(wǎng)頁中是以這種奇怪的方式出現(xiàn)的。
這種反爬蟲就是字體反爬蟲,今天志斌就來跟大家分享一下如何繞過這類反爬蟲。
一、原理
在之前,網(wǎng)站開發(fā)者在設(shè)計網(wǎng)頁時只能使用公用的字體來展示網(wǎng)頁中的數(shù)據(jù)。
但是,隨著CSS樣式的深入開發(fā),網(wǎng)站開發(fā)者可以將自己的字體放到服務(wù)器中。當(dāng)用戶在訪問Web界面時,對應(yīng)的字體就會被瀏覽器自動下載到用戶的計算機(jī)中,然后通過CSS樣式進(jìn)行調(diào)用。
之后,通過一種映射關(guān)系,使得網(wǎng)頁中的源數(shù)據(jù)變?yōu)檎嬲臄?shù)據(jù)進(jìn)行展示。
通過這種方式,使得這樣就使得網(wǎng)站開發(fā)者進(jìn)行網(wǎng)頁設(shè)計時,只需要使用特殊字符進(jìn)行占位即可,不需要將真正的數(shù)據(jù)放到頁面中去。這樣,爬蟲程序如果不知道這種映射關(guān)系的話,就無法從字體中獲取正確的數(shù)據(jù),從而實現(xiàn)反爬蟲。
二、破解
破解這類字體反爬蟲有以下幾步。
1.下載字體woff文件
從上面我們知道,字體是在服務(wù)器上進(jìn)行存儲,并通過瀏覽器下載到我們的電腦上的,那么我們就可以在網(wǎng)站上找到加載的字體文件,下載下來。
下載下來之后,打開它進(jìn)行觀察,這里給大家分享一個再點字體編譯器網(wǎng)站,使用它可以很方便打開woff文件。網(wǎng)址:http://font.qqe2.com/index-en.html。
打開字體文件之后,我們發(fā)現(xiàn),每個數(shù)字都對應(yīng)一個字符串,如7對應(yīng)的是$E9C7。
2.尋找映射關(guān)系
通過對源網(wǎng)頁中的占位數(shù)據(jù)和字體進(jìn)行比對,我們發(fā)現(xiàn)將源數(shù)據(jù)中的&#x替換成$,然后將字符串首字母大寫,就變成了字體對應(yīng)的字符串了。
3.構(gòu)建映射算法
在上面我們已經(jīng)找到了字體之間映射關(guān)系,那么我們現(xiàn)在就可以開始用Python來構(gòu)建映射算法,從而使得爬蟲可以獲取一個正確的數(shù)據(jù)。
構(gòu)建代碼如下:
- data = {
- '' : 7,
- '' : 1,
- '' : 2,
- '' : 6,
- '' : 9,
- '' : 5,
- '' : 3,
- '' : 0,
- '' : 4,
- '' : 8,
- }
之后,我們即可對網(wǎng)頁進(jìn)行爬取,然后將對應(yīng)的源數(shù)據(jù)與data進(jìn)行比如,從而獲得正確數(shù)據(jù)。
三、小結(jié)
1. 本文詳細(xì)介紹了如何破解字體反爬蟲,由于這種反爬蟲是使用CSS進(jìn)行加載和映射的,所以即使使用一些自動化軟件或者渲染工具也無法獲得真正的數(shù)據(jù)。
2. 這類反爬蟲的破解只需要將woff文件中的字體與頁面數(shù)據(jù)之間的對應(yīng)關(guān)系找到,構(gòu)建好即可。
3. 找到woff文件進(jìn)行下載是關(guān)鍵。
4. 有興趣的讀者可以找志斌要一下網(wǎng)站自己嘗試一下。
5. 本文僅供學(xué)習(xí)參考,不做它用。