爬蟲 | 五八字體反爬
作者丨木下瞳來源丨木下學(xué)Python
前言
58二手車:
https://sz.58.com/ershouche/pn2/?PGTID=0d100000-0000-4e81-5801-e3cfbaae2802&ClickID=120

小編想爬一爬58同城的二手車,了解一下,爬取過程中在二手車的信息詳情頁,發(fā)現(xiàn)交易價的數(shù)字是加密過的:
我們來看一看怎么獲取正確的數(shù)字。
字體文件獲取
查看源代碼發(fā)現(xiàn),源代碼里面返回的和我們右鍵檢查的不一樣:

這是因為現(xiàn)實源代碼里的數(shù)字加密了后,渲染到前端,以那些牛鬼蛇神的樣子出現(xiàn)的。
字體加密,就會涉及到字體文件,字體文件后綴一般為 woff,ttf,我們在源代碼里面搜索,由于太長,分兩張圖:


可以看到,這就是字體文件的鏈接內(nèi)容,我們需要得到字體文件內(nèi)容。
在這里看到了 base64,說明它后面這一串,也就是兩個箭頭之間的字符串的 base64 編碼過的,這些字符串就是字體映射的內(nèi)容。
src:url 后面一直到第二個箭頭這段字符串是一個 url,訪問這個鏈接,就會下載字體文件,由于 58 每一頁的字體映射都不一樣,這樣每次請求會增加網(wǎng)絡(luò)請求的時間。
所以我們采取 base64 解碼,把兩個箭頭之間的字符串解碼,解碼的結(jié)果是二進制的,寫入文件,后綴為 woff:

這樣我們就獲得了字體文件。
?字體映射?
由于我們不經(jīng)過字體破解,直接爬取源代碼得到的字體是:
驋閏.齤
這樣的形式,我們就以這個來說明怎么轉(zhuǎn)為正確的數(shù)字。
我們得到的字體文件,可以用 fontTools 庫打開,我們需要另存為 xml 文件,這樣是方便打開 xml 文件分析映射:

打開 xml 文件,有兩個重要的部分:

驋 我們來看, 對應(yīng) code 屬性的 0
0x9a4b 對應(yīng) name 屬性的?glyph00003
name 的值為 glyph00003 對應(yīng)的 id 屬性為 3
由于是從上往下是從 1 開始,所以需要減一,才是映射的數(shù)字
可以通過 xml 庫讀取 xml 文件來進行字體映射轉(zhuǎn)換:

我們看看是否對應(yīng)上了:



這樣我們字體反爬就破解了。
小編爬取的是深圳二手車的數(shù)據(jù),爬蟲已寫好,想要爬蟲的小伙伴可以去獲取,來看看小編爬取的結(jié)果:


近期精彩內(nèi)容推薦:??
?狠人 Spring Cloud 20000 字總結(jié)!

在看點這里
好文分享給更多人↓↓

