Spider-天眼查字體反爬


字體反爬也就是自定義字體反爬,通過調用自定義的woff文件來渲染網頁中的文字,而網頁中的文字不再是文字,而是相應的字體編碼,通過復制或者簡單的采集是無法采集到編碼后的文字內容!

1.思路

近期在爬取天眼查某公司詳情頁遇到了字體反爬,經過多次測試,終於解決了字體反爬

 

首先我們來看一下字體反爬

此圖可以看出源代碼數字跟頁面顯示的內容是不一樣的,在調試器中看到它有一個類tyc-num

此圖可以看出類tyc-num存放的是一個字體,通過network獲取這個字體

此圖可以看出正常的字體數字是1234567890而現在顯示的是7540129863它是順序打亂的,把tyc-num.woff下載過來,下載過來之后發現windows是查看不了的,我用的是在線工具查看

在線工具鏈接:FontEditor

此圖可以發現索引2對應的是4,說明第4個數字是0,通過Python對woff轉換成xml

from fontTools.ttLib import TTFont
font = TTFont('tyc-num.woff')
font.saveXML('tyc-num.xml')

查看xml文件

此圖發現id2對應是4跟在線查看器是一樣的,那就找到了對應關系

2.代碼實現

安裝 fontTools

pip install fontTools

上代碼(代碼更新2019-01-21|19:23:16) PS:發現某些公司時間還是對不上,代碼更新了,上面思路是一樣的

#!/usr/bin/env python
# -*- coding:utf-8 -*- 
from fontTools.ttLib import TTFont
import re

font = TTFont('tyc-num.woff')  # 打開tyc-num.woff
font.saveXML('tyc-num.xml')  # 保存為tyc-num.xml
with open('tyc-num.xml', 'r') as f:
    xml = f.read()  # 讀取tyc-num.xml賦值給xml
GlyphID = re.findall(r'<GlyphID id="(.*?)" name="(\d+)"/>', xml)  # 獲得對應關系
GlyphIDNameLists = list(set([int(Gname) for Gid, Gname in GlyphID])) # 對應關系數量轉換
# print(GlyphIDNameLists)
DigitalDicts = {str(i): str(GlyphIDNameLists[i - 2]) for i in range(2, len(GlyphIDNameLists)+2)}  # 數字對應關系的字典推導式
# print(DigitalDicts)
GlyphIDDicts = {str(Gname): DigitalDicts[Gid] for Gid, Gname in GlyphID}  # 通過數字對應關系生成源代碼跟頁面顯示的字典推導式
print('-' * 39 + '數字對應關系的字典推導式' + '-' * 39)
print(DigitalDicts)
print('-' * 27 + '通過數字對應關系生成源代碼跟頁面顯示的字典推導式' + '-' * 27)
print(GlyphIDDicts)

代碼運行結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM