快手最近更新了字型反爬,經過三天奮戰初步解決了快手的字型反爬。
下面截圖是一套字型庫
這是一套字型庫這麼多連線可能是為了適應不同瀏覽器,我看到我司資料庫有400多快手主頁鏈結,於是就將這400多主頁鏈結請求了一遍用正則提取了這400多主頁中的字型庫,去重後發現只有5套不同的,也就可以初步認為快手使用5套字型庫每次請求隨機傳送一套字型庫。
於是程式就有了這樣一步每次請求先分析用了那套字型庫,這很簡單自行實現就行。
我們再來看看快手用來替換的字型是類似韓文一樣的字元
把字元拿下來然後使用unicode編碼
s = 'ꯎ껾껾뷝'
new_s = (list(map(lambda x:x.encode('unicode_escape'),s)))
print(new_s)
[b'\\uabce', b'\\uaefe', b'\\uaefe', b'\\ubddd']
看到這很多同學應該已經知道怎麼回事了,接下來分析字型庫,乙個有五套我們拿一套來分析。
看到上面的unicode碼和上上圖中編碼後的碼是不是很相似 ,這是需要自己手動寫五套對映關係,並且改為「\\u***x」的形式,這裡我已經改好了
fontscn_h57yip2q =
fontscn_3jqwe90k =
fontscn_yuh4hy4p =
fontscn_qw2f1m1o =
fontscn_yx77i032 =
到這裡快手的字型反爬就解決的差不多了,首先是解析網頁知道是用那一套字型庫,然後拿到的特殊字元轉為unicode碼,最後將得到的unicode跟對應的字型庫比較得到正確的資料
li =
s = 'ꯎ껾껾뷝'
print(s)
new_s = (list(map(lambda x:x.encode('unicode_escape'),s)))
print(new_s)
for i in new_s:
try:
num = fontscn_yx77i032[str(i)[3:-1]]
except keyerror:
continue
print(li)
ꯎ껾껾뷝
[b'\\uabce', b'\\uaefe', b'\\uaefe', b'\\ubddd']
['4', '0', '0', '1']
def parsingchar(type,data):
fontscn_h57yip2q =
fontscn_3jqwe90k =
fontscn_yuh4hy4p =
fontscn_qw2f1m1o =
fontscn_yx77i032 =
woff_dict =
li =
new_data = (list(map(lambda x:x.encode('unicode_escape'),data)))
for i in new_data:
if len(str(i))>5:
num = woff_dict[type][str(i)[3:-1]]
else:
res = ''.join(li)
print(res)
return res
if __name__ == '__main__':
parsingchar('yx77i032','ꯎ껾껾.뷝w')
個人搭建的腫瘤社群希望能為腫瘤患者提供乙個交流互助的平 字型反爬之快手
快手的直播列表頁面的粉絲數用了字型反爬,之前在字型反爬之貓眼電影中提過這類問題的解決方案。字型反爬的核心是找出字型之間不變的對映關係。閱讀步驟 效果展示 專案位址 快手字型反爬專案 快手字型反爬機制圖示 不變的關係 每個請求字型檔案不同,每個字型檔案字型的筆畫不同。通過對比n個字型檔案找到乙個關係 ...
反爬機制之字型反爬詳解
字型反爬,顧名思義就是利用自定義的字元編碼與字型檔案的對映呈現文字的一種反爬措施。下面我們通過例子來詳細介紹字型反爬是怎麼實現的以及解決方案。目錄字元編碼 css3 font face 規則 html檔案 example.html woff字型檔案 example.woff html顯示效果 解決方...
Python爬蟲 字型反爬
網頁開發者自己創造一種字型,因為在字型中每個文字都有其代號,那麼以後在網頁中不會直接顯示這個文字的最終的效果,而是顯示他的代號,因此即使獲取到了網頁中的文字內容,也只是獲取到文字的代號,而不是文字本身。因為創造字型費時費力,並且如果把中國3000多常用漢字都實現,那麼這個字型將達到幾十兆,也會影響網...