程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python字體反爬之樂居字體反爬,一文看懂,一文學會

編輯:Python
 你正在閱讀 【夢想橡皮擦】 的博客 閱讀完畢,可以點點小手贊一下 發現錯誤,直接評論區中指正吧 橡皮擦的第 <font color=red>672</font> 篇原創博客

️ 實戰場景

本次字體反爬的目標場景是:樂居,地址如下所示:
https://house.leju.com/as/new/#wt_source=pc_csss_mf_zxlp

以上頁面是隨機打開的,你可以選擇自己的城市進行測試。使用開發者工具,先找到對應的數字,查看是否所見即所得。

很明顯的一個字體反爬,數字由 8733 轉變為 7100 ,既然已經發現是數字產生了變化,那接下來的事情就非常容易了。
我們抓取一下字體文件,查看其內部具體包含哪些字體編碼。
結果發現字體文件竟然是已字節流形式寫到了前台,這樣我們後續獲取字體文件,就轉變成了字節讀取與解析。

通過工具查看字體文件之後,發現除字體外,還存在一些中文字符被替換的情況,我們在頁面實測一下。
測試之後,中文字符在列表頁未啟用,估計在其它頁面,這裡不做過多探究。
查看字體文件是否一致
捕獲多次刷新數據,得到下圖內容。

對比結果之後,可以了解到中文字符的編碼無變化,僅數字產生變化,但是數字對應的英文又是確定的,這裡其實已經解決了該案例。

️ 樂居實戰場景

字體文件的解析,參考我們 Python 爬蟲 120 例子中的其它博客即可,本文僅對字體文件的爬取做解析。
import requests
import io
from lxml import etree
import base64
from fontTools.ttLib import TTFont

detail_url = 'https://house.leju.com/as/new/#wt_source=pc_csss_mf_zxlp'
res = requests.get(detail_url)
tree = etree.HTML(res.text)
style = tree.xpath(&quot;//style/text()&quot;)
font_face = style[0]

font_char = font_face.split(&quot;src: url(data:font/truetype;charset=utf-8;base64,&quot;)[1].split(&quot;) format('woff');&quot;)[0]
# print(font_char)

# 轉換為字體文件
font_file_io = base64.b64decode(font_char)
print(type(font_file_io))

# 加載字體二進制流
font = TTFont(io.BytesIO(font_file_io))
print(font)

# 測試一下字體文件
font_map = font['cmap'].getBestCmap()
print(font_map)

運行代碼的輸出如下所示。

此時問題已經成功解決。
右下角有個大拇指,點贊的漂亮加倍


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved