23 關於破解字型的反爬

2021-10-20 15:16:55 字數 2257 閱讀 8732

字型反爬指的就是瀏覽器頁面上的字元和除錯視窗或者原始碼中的內容,顯示的不一樣,這就是字型反爬。

用爬蟲直接去取 1300 或 複製頁面的數字,得到的結果龤驋麣麣,要理解字型反爬,先要理解字符集編碼的原理。

反爬例項

**ascii碼 **

ascii 碼使用指定的7位或8位二進位制數組合來表示128或256種可能的字元。標準ascii碼也叫基礎ascii碼,使用7位二進位制數(剩下的1位二進位制為0)來表示所有的大寫和小寫字母,數字0 到9、標點符號,以及在美式英語中使用的特殊控制字元。

unicode碼

unicode為世界上所有字元都分配了乙個唯一的數字編號,這個編號範圍從 0x000000 到 0x10ffff(十六進製制),有110多萬,每個字元都有乙個唯一的unicode編號,這個編號一般寫成16進製制,在前面加上u+。例如:「馬」的unicode是u+9a6c。它是一種規定,unicode本身只規定了每個字元的數字編號是多少,並沒有規定這個編號如何儲存。

理論上可以直接把unicode編號直接轉換成二進位制進行儲存,而unicode並不是這麼操作,因為除了這種直接轉換成二進位制的方案外,還有其他方案,主要有utf-8,utf-16,utf-32,gbk。(utf-8、utf-16、utf-32……都是 unicode編碼 的一種實現。)

utf-8編碼方式

網際網路的普及,強烈要求出現一種統一的編碼方式。utf-8 就是在網際網路上使用最廣的一種 unicode 的實現方式。其他實現方式還包括 utf-16(字元用兩個位元組或四個位元組表示)和 utf-32(字元用四個位元組表示),不過在網際網路上基本不用。這裡的關係是,utf-8 是 unicode 的實現方式之一。

utf-8 最大的乙個特點,就是它是一種變長的編碼方式。它可以使用1~4個位元組表示乙個符號,根據不同的符號而變化位元組長度。

utf-8 的編碼規則很簡單,只有二條:

對於單位元組的符號,位元組的第一位設為0,後面7位為這個符號的 unicode 碼。因此對於英語字母,utf-8 編碼和 ascii 碼是相同的。

對於n位元組的符號(n > 1),第乙個位元組的前n位都設為1,第n + 1位設為0,後面位元組的前兩位一律設為10。剩下的沒有提及的二進位制位,全部為這個符號的 unicode 碼。

漢字的utf-8編碼表示

獲取漢字unicode編號

轉化為二進位制數

根據utf-8編碼格式,將二進位制資料填充到指定位置

將填充好的新二進位制資料,轉換成16進製制

獲取unicode編號

utf-8編碼示例

編號與編碼

乙個字的unicode編號是固定的,但是在計算機上的位元組碼,取決於編碼方案的實現方式。乙個漢字在unicode中的編號的

16進製制數,跟utf8編碼後的16進製制數不是一回事。

字型可以理解為通過unicode編號,對應的自定義圖形

​字型字元對應關係

傳遞字元 4 ,有兩種方案,

第一種是傳遞字元4的位元組碼:瀏覽器拿到位元組碼,轉換成unicode編號,在沒有指定字型檔案的前提下,通過unicode編號在到系統自帶字型中尋找字元向量圖,得到 『4』

第二種是,傳遞另乙個繁體字的位元組碼,同時,傳遞乙個自定義的字型。瀏覽器拿到繁體字的位元組碼,轉換成unicode編碼,到css指定的字型檔案中查詢,找到字元向量圖 『4』。

第二種情況下,瀏覽器後台和爬蟲拿到的繁體字的位元組碼,只能在正常字型中查詢字元向量圖,所以只能看到

字元對應示例

正常對應關係

使用自定義字元向量圖

字型樣式

自定義字元檔案

對應關係

工具:fonttools包 pip install fonttools

字型檔案儲存的是unicode編號和字元向量圖的對應關係

字型編輯工具

unicode編碼,和glyph編號,和 id之間存在對應關係

對應關係

對應關係

58同城反爬嚴格,請求頭需要完整

獲取ttf檔案

​處理字元**1

unicode編號的16進製制(位元組)表示,與某個漢字的utf8編碼位元組表示的區別

關於XP的字型

人生活在貧民區的時候,就不會感慨外面的世界有多精彩。等哪天飛黃騰達了再回來看的時候,往往無法理解以前是怎麼熬過來的。從xp進化到vista,再折騰到ubuntu,可謂大開了一番眼界。尤其是ubuntu對下面的字型設定略通一二以後,才知道控制台原來可以看著這麼舒服的,看網頁也可以不用那麼累人。現在再回...

關於字型和字型微調(Hinting )的知識

點陣字型與向量字型點陣字型也叫點陣圖字型,其中每個字形都以一組二維畫素 資訊表示。由於點陣圖的原故,點陣字型很難進行縮放,特定的點陣字型只能清晰地顯示在相應的字型大小下。但對於 12 16px 這樣小的漢字,點陣字型常常比其它型別的字型在螢幕上更好的顯示效果。常見的點陣字型有 bdf,pcf,fnt...

關於字型和字型微調(Hinting )的知識

點陣字型與向量字型點陣字型也叫點陣圖字型,其中每個字形都以一組二維畫素 資訊表示。由於點陣圖的原故,點陣字型很難進行縮放,特定的點陣字型只能清晰地顯示在相應的字型大小下。但對於 12 16px 這樣小的漢字,點陣字型常常比其它型別的字型在螢幕上更好的顯示效果。常見的點陣字型有 bdf,pcf,fnt...