[JS 分析] 天_眼_查 字體文件

0. 參考

js分析 貓_眼_電_影 字體文件 @font-face

1. 分析

1.1 定位目標元素

?

1.2 查看網頁源代碼

?

1.3 requests 請求提取得到大量錯誤信息

對比貓_眼_電_影抓取到unicode編碼,天_眼_查混合使用正常字體和自定義字體,難點在于如何從 '紅' 轉化為 '美'。

一開始認為一定有js進行了轉化,最后發現直接通過 FontCreator 搜索 '紅' 返回結果為 '美' 。。。

?

1.4 查看目標元素 CSS Computed 信息,使用了網絡請求字體

?

1.5 查看 字體文字 請求

?

1.6 使用 FontCreator 打開字體文件 {'eight': 0, 'four': 1} 能夠解密上文的數字映射

?

1.7 ctrl + f 搜索 ‘紅’ 出現對應的 '美',注意?hex(ord('紅')) 結果為?'0x7ea2' ,也可搜索十進制的unicode編碼 32418

?

?

1.8 全局搜索 tyc-num

?

1.9 全局搜索?tyc-num.woff

?

1.10 全局搜索?font.css 看起來是動態生成文件(每天一更,使用不同的中文字集合)

?

2. JS分析

線索:全局搜索 .tyc-num tyc-num?

根據下文 xml 文件信息考慮搜索 0x, 也可以考慮搜索 js 將中文轉為 unicode 的方法關鍵字, 以及?65535/65536

另外不經意看到 'code point' 相關代碼

最終還是找不到如何從 '紅' 轉 '美' 的相關 js 代碼?

考慮到上文?FontCreator 搜索 '紅' 返回結果為 '美',似乎可以直接繞開 js 解密。。。?

?

3. 字體文件分析

3.1 字體文件 woff 轉 xml

詳見參考文章

對比前后兩天下載的 woff 字體文件,應該是批量生成的歷史文件

?

3.2 根據步驟 1.7 搜索 '7ea2' 結果集中在 <cmap>

?

3.3 根據上圖繼續搜索 '_#228',?根據參考文章可知,下圖方框的 name="_#228" 對應于某個字形定義,用于渲染顯示

?

4. 使用 python 實現 '紅' >>> '美'

思路:提取 '紅',計算unicode編碼,根據?<cmap>?匹配到name='_#228', 再使用?'_#228' 根據?<glyf>?到某一字形定義'美'

4.1 fontTools 讀取 <cmap> 字典 {十進制的unicode編碼: '_#xxx', ...}

?

4.2 fontTools 讀取 <glyf> name 列表 ['_#xxx', ...]

?

4.3 手動建立真實字符列表

使用微信小程序識別效果令人驚嘆

成功對應

?

5. 完整代碼

import requests
from scrapy import Selectorfrom fontTools.ttLib import TTFonturl = 'https://www.tianyancha.com/company/59837300?'
ocr = """.01234689愿功近西真差全當表華
心八姐六防金步夫尚放很子變提便司依密林住
諸職建保快左亦節特勢善她氣國族朝叫甚合論
選船三起況員些突覺拿共沒邊條劉奇先口約最
著立德留治根降且馬手大去細無増問物聯同害
找連父待加母禮受之張方價臣識考足看似始也
維九終業滿思帝及聲望干黃動房右到屬府絕跟
許云際收火二歷回營得設數苦目易體那切年查
字安研容資社品江為破羅把嗎笑土另聽片客本
代產走布已告喜雖若省算企置影書形未復東四
求任孩再高失極自現點比謂花級河師罪案黑直
爭革乎由程響英費反像紅應注將視決面別美達
示縣計宗清開春威克臺護天度飛路分京次學就
質五守做平何間輕重擊才隊即包敢會衛致裝這
兒關欲說消新系圍親參供寫亞改道城團地件敵
量必干答陳較精周相
""".replace('\n', '')
print(len(ocr))font = TTFont('tyc-num_1.woff')
cmap = font['cmap']
cmap_dict = cmap.getBestCmap()
print(len(cmap_dict))
glyf_list = list(font['glyf'].keys())
print(len(glyf_list))mydict = dict((k, v.strip()) for k, v in zip(glyf_list, ocr))
print(mydict)r = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
print(r.status_code, len(r.content))
sel = Selector(text=r.text)# text = '45619.888888萬紅元 6887-82-60'
#         15298.000000萬美元 2007-03-26
for text in sel.css('.tyc-num::text').extract():result = []for t in text:code = ord(t)                       #紅:32418name = cmap_dict.get(code, None)    #_#228if name is not None:# index = glyf_list.index(name)   #238# rst = ocr[index]                #美rst = mydict.get(name, t)else:rst = tresult.append(rst)print(text, ' >>> ', ''.join(result))print('#'*10)
View Code

?

6.運行結果?

?

轉載于:https://www.cnblogs.com/my8100/p/js_tianyancha.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389655.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389655.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389655.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深入學習Redis(4):哨兵

前言在 深入學習Redis&#xff08;3&#xff09;&#xff1a;主從復制 中曾提到&#xff0c;Redis主從復制的作用有數據熱備、負載均衡、故障恢復等&#xff1b;但主從復制存在的一個問題是故障恢復無法自動化。本文將要介紹的哨兵&#xff0c;它基于Redis主從復制&#xff0c;…

1805. 字符串中不同整數的數目

1805. 字符串中不同整數的數目 給你一個字符串 word &#xff0c;該字符串由數字和小寫英文字母組成。 請你用空格替換每個不是數字的字符。例如&#xff0c;“a123bc34d8ef34” 將會變成 " 123 34 8 34" 。注意&#xff0c;剩下的這些整數為&#xff08;相鄰彼此至…

經天測繪測量工具包_公共土地測量系統

經天測繪測量工具包部分-鄉鎮第一師 (Sections — First Divisions of Townships) The PLSS Townships are typically divided into 36 Sections (nominally one mile on a side), but in the national standard this feature is called the first division because Townships …

洛谷 P4012 深海機器人問題【費用流】

題目鏈接&#xff1a;https://www.luogu.org/problemnew/show/P4012 洛谷 P4012 深海機器人問題 輸入輸出樣例 輸入樣例#1&#xff1a; 1 1 2 2 1 2 3 4 5 6 7 2 8 10 9 3 2 0 0 2 2 2 輸出樣例#1&#xff1a; 42 說明 題解&#xff1a;建圖方法如下&#xff1a; 對于矩陣中的每…

day5 模擬用戶登錄

_user "yangtuo" _passwd "123456"# passd_authentication False #flag 標志位for i in range(3): #for 語句后面可以跟else&#xff0c;但是不能跟elifusername input("Username:")password input("Password:")if username _use…

opencv實現對象跟蹤_如何使用opencv跟蹤對象的距離和角度

opencv實現對象跟蹤介紹 (Introduction) Tracking the distance and angle of an object has many practical uses, especially in robotics. This tutorial explains how to get an accurate distance and angle measurement, even when the target is at a strong angle from…

spring cloud 入門系列七:基于Git存儲的分布式配置中心--Spring Cloud Config

我們前面接觸到的spring cloud組件都是基于Netflix的組件進行實現的&#xff0c;這次我們來看下spring cloud 團隊自己創建的一個全新項目&#xff1a;Spring Cloud Config.它用來為分布式系統中的基礎設施和微服務提供集中化的外部配置支持&#xff0c;分為服務端和客戶端兩個…

458. 可憐的小豬

458. 可憐的小豬 有 buckets 桶液體&#xff0c;其中 正好 有一桶含有毒藥&#xff0c;其余裝的都是水。它們從外觀看起來都一樣。為了弄清楚哪只水桶含有毒藥&#xff0c;你可以喂一些豬喝&#xff0c;通過觀察豬是否會死進行判斷。不幸的是&#xff0c;你只有 minutesToTest…

熊貓數據集_大熊貓數據框的5個基本操作

熊貓數據集Tips and Tricks for Data Science數據科學技巧與竅門 Pandas is a powerful and easy-to-use software library written in the Python programming language, and is used for data manipulation and analysis.Pandas是使用Python編程語言編寫的功能強大且易于使用…

圖嵌入綜述 (arxiv 1709.07604) 譯文五、六、七

應用 圖嵌入有益于各種圖分析應用&#xff0c;因為向量表示可以在時間和空間上高效處理。 在本節中&#xff0c;我們將圖嵌入的應用分類為節點相關&#xff0c;邊相關和圖相關。 節點相關應用 節點分類 節點分類是基于從標記節點習得的規則&#xff0c;為圖中的每個節點分配類標…

聊聊自動化測試框架

無論是在自動化測試實踐&#xff0c;還是日常交流中&#xff0c;經常聽到一個詞&#xff1a;框架。之前學習自動化測試的過程中&#xff0c;一直對“框架”這個詞知其然不知其所以然。 最近看了很多自動化相關的資料&#xff0c;加上自己的一些實踐&#xff0c;算是對“框架”有…

1971. Find if Path Exists in Graph

1971. Find if Path Exists in Graph 有一個具有 n個頂點的 雙向 圖&#xff0c;其中每個頂點標記從 0 到 n - 1&#xff08;包含 0 和 n - 1&#xff09;。圖中的邊用一個二維整數數組 edges 表示&#xff0c;其中 edges[i] [ui, vi] 表示頂點 ui 和頂點 vi 之間的雙向邊。 …

移動磁盤文件或目錄損壞且無法讀取資料如何找回

文件或目錄損壞且無法讀取說明這個盤的文件系統結構損壞了。在平時如果數據不重要&#xff0c;那么可以直接格式化就能用了。但是有的時候里面的數據很重要&#xff0c;那么就必須先恢復出數據再格式化。具體恢復方法可以看正文了解&#xff08;不格式化的恢復方法&#xff09;…

python 平滑時間序列_時間序列平滑以實現更好的聚類

python 平滑時間序列In time series analysis, the presence of dirty and messy data can alter our reasonings and conclusions. This is true, especially in this domain, because the temporal dependency plays a crucial role when dealing with temporal sequences.在…

基于SmartQQ協議的QQ自動回復機器人-1

0. 本項目的原始代碼及我二次開發后的代碼 1. 軟件安裝:【myeclipse6.0 maven2】 0. https://blog.csdn.net/zgmzyr/article/details/6886440 1. https://blog.csdn.net/shuzhe66/article/details/45009175 2. https://www.cnblogs.com/whgk/p/7112560.html<mirror><…

1725. 可以形成最大正方形的矩形數目

1725. 可以形成最大正方形的矩形數目 給你一個數組 rectangles &#xff0c;其中 rectangles[i] [li, wi] 表示第 i 個矩形的長度為 li 、寬度為 wi 。 如果存在 k 同時滿足 k < li 和 k < wi &#xff0c;就可以將第 i 個矩形切成邊長為 k 的正方形。例如&#xff0c…

幫助學生改善學習方法_學生應該如何花費時間改善自己的幸福

幫助學生改善學習方法There have been numerous studies looking into the relationship between sleep, exercise, leisure, studying and happiness. The results were often quite like how we expected, though there have been debates about the relationship between sl…

Spring Boot 靜態資源訪問原理解析

一、前言 springboot配置靜態資源方式是多種多樣&#xff0c;接下來我會介紹其中幾種方式&#xff0c;并解析一下其中的原理。 二、使用properties屬性進行配置 應該說 spring.mvc.static-path-pattern 和 spring.resources.static-locations這兩屬性是成對使用的&#xff0c;如…

深挖“窄帶高清”的實現原理

過去幾年&#xff0c;又拍云一直在點播、直播等視頻應用方面潛心鉆研&#xff0c;取得了不俗的成果。我們結合點播、直播、短視頻等業務中的用戶場景&#xff0c;推出了“省帶寬、壓成本”系列文章&#xff0c;從編碼技術、網絡架構等角度出發&#xff0c;結合又拍云的產品成果…

學習總結5 - bootstrap學習記錄1__安裝

1.bootstrap是什么&#xff1f; 簡潔、直觀、強悍的前端開發框架&#xff0c;說白了就是給后端二把刀開發網頁用的&#xff0c;讓web開發更迅速、簡單。 復制代碼 2.如何使用&#xff1f; 如圖所示到bootstrap中文網進行下載 復制代碼 下載完成之后&#xff0c;如圖所示&#x…