JS逆向:處理某點評網站字體反爬

1、字體反爬原理

  • 在CSS3之前,Web開發者必須使用用戶計算機上已有的字體。但是在CSS3時代,開發者可以使用@font-face爲網頁指定字體,開發者可以將心儀的字體文件放在Web服務器上,並在Css樣式中使用它。用戶使用瀏覽器訪問Web應用時,對應的字體會被瀏覽器下載到用戶的計算上。
  • CSS的作用是修飾HTML,所以在頁面渲染的時候不會改變HTML文檔內容。由於字體的加載和映射工作是由CSS完成的,所以即使我們藉助Splash、Selenium和Pypeeteer工具也無法獲得對應的文字內容。字體反爬正式利用了這個特點,將自定義字體應用到網頁中重要的數據上,使得爬蟲程序無法獲得正確的數據。

2、 某點評網站字體反爬介紹

  • 打開網站某店鋪頁面,郵件檢查店鋪評論數、地址,發現想要查找的數據變成了下面這個樣子:
  • 像這種情況就是字體反爬,對於這類點評網站來說,評分、評論數、金額、店換號碼、店鋪地址、特色菜品、用戶評分、用戶評論、用戶消費金額 等等這些都屬於核心資產,都在加密的範圍內;

  • 我們查看右側的 style,發現 地址 對應 style 中 .adressfont-family 值爲 PingFangSC-Regular-address,而 電話號碼 對應的 style 中 .numfont-family 值爲 PingFangSC-Regular-num,由此我們也可以推斷,不同的網頁內容,加載的字體文件是動態變化的;


  • 那具體什麼內容,對應什麼字體文件呢?我們打開 全局 search,搜索 @font-face,找到下面的 .css 文件,打開以後通過分析發現, address、dishname、hours、review、num、shopdesc,分別對應了不同的 .woff 文件,這裏的 .woff 文件就是字體存放的地方;

  • 除了通過全局搜索的方式獲取字體文件的 url 地址,也可以鼠標放在 .css 文件名上面,就能看到 .css 文件的 url;


  • 在實際爬蟲開發的時候一般訪問網頁後,在網頁源代碼中獲取 .css 文件的 url,具體可以通過正則表達式的方式匹配提取;

3、反反爬策略

  • 我們這裏以 review 的 woff 文件爲例子,訪問並下載該 woff 文件,之後將下載的文件拖入 https://font.qqe2.com/ ,得到下圖:
  • 此時我們發現,每個字符都對應了一個編碼,這裏的編碼代表什麼意思呢?我們打開調試面板,在 Network 中查找 review 相關的 response,通過分析我們發現,返貨的數據中 <svgmtsi class="review">&#xe255 ;</svgmtsi> 對應實際的漢字 ,查找字體文件我們發現,e255 和字體編碼 unie255 相對應;
  • 至此,我們就已經完成了字體反爬的破解工作。

4、代碼實現

  • 核心步驟包括:
    -- 訪問網頁,獲取頁面源代碼;
    -- 正則匹配查找 .css 文件的 url;
    -- 查找 .woff 文件並下載保存;
    -- TTFont 模塊讀取 woff 文件,轉換成 xml 保存;
    -- 讀取 xml 文件創建映射表;
    -- 發起請求獲取 review 等數據;
    -- 通過映射表,替換被加密的數據;

  • 代碼:
    -- 略:參考:https://github.com/downdawn/dzdp/tree/595fbcab21f7e342c51c521c102e8e08ecb6d64f

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章