Spider-天眼查字體反爬

字體反爬也就是自定義字體反爬,經過調用自定義的woff文件來渲染網頁中的文字,而網頁中的文字再也不是文字,而是相應的字體編碼,經過複製或者簡單的採集是沒法採集到編碼後的文字內容!html

1.思路

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

 

首先咱們來看一下字體反爬git

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

此圖能夠看出類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文件spa

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

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)

代碼運行結果

相關文章
相關標籤/搜索