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