前端电子表数字字体_爬虫:如何优雅应对字体反爬
目錄
THE BEGIN
一 什么是字體反爬
二 如何解密
1.人工解密
2.工具解密
三 建立映射關系
四 解密
THE BEGIN
網頁數據爬取可以簡單分為三步:抓取頁面,分析頁面,存儲數據。其中第一二步最為頭疼,因為每個站點各有特色,你要不斷檢查網頁結構尋找其規律,更不用說現在各種各樣的反爬蟲手段了。
一般來說,大多數網站會從三方面反爬蟲:用戶請求,如請求頭檢測;用戶行為,如限制IP短時間頻繁訪問;網站加載方式,如Ajax異步加載。
今天來看看另一種常見反爬手段:字體反爬。
?
一 什么是字體反爬?
在這里有一個例子【實習僧】
大學生找實習求職招聘網站 | 實習僧?www.shixiseng.com進入官網,打開開發者模式,可以觀察到關鍵信息在頁面上顯示正常,但是源碼是亂碼
?
?
在這里,源代碼中展示的并不是純粹的數字,而是在頁面使用了font-face定義了字符集,并通過unicode去映射展示。這對于正常訪問的用戶沒有影響,因為瀏覽器會加載css中的font字體為用戶渲染好,而對于爬蟲來說卻極其不友好,因為爬取下來的關鍵信息都是亂碼。這在一定程度上起到了反爬蟲的作用,因為數據被加密了!
?
那么,對于這種字體反爬該怎么處理呢?
二 如何解密
正如前文所說,反爬是通過字符集建立映射關系,將正常信息加密成一串亂碼。那么首先,我們要找到這些映射關系在哪。
右鍵查看網頁源碼,查找font-face,可以看到字體信息密密麻麻一長串。
?
這些,就是我們所需要的信息了,接下來就是如何解密了。
在這里有兩種方法可以解密
1. 人工解密
這種方法最簡單,如果需要尋找的字符映射不多(如獲取薪資,只有數字0-9)則可以通過觀察網頁尋找字符映射關系。當樣本足夠多時,你就可以自己建立一個映射表。
?
不過這種方法不能長期使用,網站一旦更新字體映射就會失效,需要重新找規律。
2.工具解密
把上面的font-face這一段字符串爬取出來,可以看到這些字體源是用了base64加密,可以用base64庫進行提取,把提取后的字體文件保存到shixi.ttf中。(ttf是字體的一種類型)
ttf文件無法直接打開,可以用軟件FontCreator打開,然后查看每一個字符對應的編碼。
?
這里我們可以看到該網站加密了數字,字母、中文,足足100個,像第一種方法手動找規律肯定是行不通的。
當然,還有萬能的python庫,fontTools,可以用python代碼來操作ttf文件。
這里我們用這個庫來進行字體解密
三 建立映射關系
ttf文件無法直接打開,我們可以將其轉換成xml文件,并觀察有沒有什么規律。
?
觀察,cmap結點下存在對應關系,code所示即為網頁上源碼形式。但是用getBestCmap()函數獲取后又變成十進制的數了,所以需要用hex()函數將10進制整數轉換成16進制,以字符串形式表示成原來的行。另外第一行的map沒有用,需要刪除才能繼續解析。
第一次替換?
第三次替換到此還沒結束,觀察站點,每個數據都有前綴&#x,所以我們還需進行前綴替換。至此,映射關系就建立好了。
部分代碼四 解密
得到映射關系后,我們就可以用映射表對獲取到的HTML源碼進行清洗替換,之后就可以用爬蟲正常爬取數據了。
?
這里觀察頁面結構,中規中矩,可以考慮用Beautiful Soup爬蟲庫進行爬取
?
之后,就得到我們想要的數據了,清洗匯總就可以進行進行數據分析了。
?
最后
爬蟲不易
前端工程師也不易
大家記得要文明爬蟲
也歡迎大家關注我的公眾號【數據自留地】
每周更多爬蟲、數據分析干貨
?
總結
以上是生活随笔為你收集整理的前端电子表数字字体_爬虫:如何优雅应对字体反爬的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不用python爬今日头条_手把手教你从
- 下一篇: r语言查找是否存在空值_关于R包安装你知