日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > HTML >内容正文

HTML

前端电子表数字字体_爬虫:如何优雅应对字体反爬

發(fā)布時(shí)間:2024/9/27 HTML 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前端电子表数字字体_爬虫:如何优雅应对字体反爬 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

THE BEGIN

一 什么是字體反爬

二 如何解密

1.人工解密

2.工具解密

三 建立映射關(guān)系

四 解密


THE BEGIN

網(wǎng)頁(yè)數(shù)據(jù)爬取可以簡(jiǎn)單分為三步:抓取頁(yè)面,分析頁(yè)面,存儲(chǔ)數(shù)據(jù)。其中第一二步最為頭疼,因?yàn)槊總€(gè)站點(diǎn)各有特色,你要不斷檢查網(wǎng)頁(yè)結(jié)構(gòu)尋找其規(guī)律,更不用說(shuō)現(xiàn)在各種各樣的反爬蟲(chóng)手段了。

一般來(lái)說(shuō),大多數(shù)網(wǎng)站會(huì)從三方面反爬蟲(chóng):用戶請(qǐng)求,如請(qǐng)求頭檢測(cè);用戶行為,如限制IP短時(shí)間頻繁訪問(wèn);網(wǎng)站加載方式,如Ajax異步加載。

今天來(lái)看看另一種常見(jiàn)反爬手段:字體反爬。

?

一 什么是字體反爬?

在這里有一個(gè)例子【實(shí)習(xí)僧】

大學(xué)生找實(shí)習(xí)求職招聘網(wǎng)站 | 實(shí)習(xí)僧?www.shixiseng.com

進(jìn)入官網(wǎng),打開(kāi)開(kāi)發(fā)者模式,可以觀察到關(guān)鍵信息在頁(yè)面上顯示正常,但是源碼是亂碼

?

?

在這里,源代碼中展示的并不是純粹的數(shù)字,而是在頁(yè)面使用了font-face定義了字符集,并通過(guò)unicode去映射展示。這對(duì)于正常訪問(wèn)的用戶沒(méi)有影響,因?yàn)闉g覽器會(huì)加載css中的font字體為用戶渲染好,而對(duì)于爬蟲(chóng)來(lái)說(shuō)卻極其不友好,因?yàn)榕廊∠聛?lái)的關(guān)鍵信息都是亂碼。這在一定程度上起到了反爬蟲(chóng)的作用,因?yàn)閿?shù)據(jù)被加密了!

?

那么,對(duì)于這種字體反爬該怎么處理呢?

二 如何解密

正如前文所說(shuō),反爬是通過(guò)字符集建立映射關(guān)系,將正常信息加密成一串亂碼。那么首先,我們要找到這些映射關(guān)系在哪。

右鍵查看網(wǎng)頁(yè)源碼,查找font-face,可以看到字體信息密密麻麻一長(zhǎng)串。

?

這些,就是我們所需要的信息了,接下來(lái)就是如何解密了。

在這里有兩種方法可以解密

1. 人工解密

這種方法最簡(jiǎn)單,如果需要尋找的字符映射不多(如獲取薪資,只有數(shù)字0-9)則可以通過(guò)觀察網(wǎng)頁(yè)尋找字符映射關(guān)系。當(dāng)樣本足夠多時(shí),你就可以自己建立一個(gè)映射表。

?

不過(guò)這種方法不能長(zhǎng)期使用,網(wǎng)站一旦更新字體映射就會(huì)失效,需要重新找規(guī)律。

2.工具解密

把上面的font-face這一段字符串爬取出來(lái),可以看到這些字體源是用了base64加密,可以用base64庫(kù)進(jìn)行提取,把提取后的字體文件保存到shixi.ttf中。(ttf是字體的一種類型)

ttf文件無(wú)法直接打開(kāi),可以用軟件FontCreator打開(kāi),然后查看每一個(gè)字符對(duì)應(yīng)的編碼。

?

這里我們可以看到該網(wǎng)站加密了數(shù)字,字母、中文,足足100個(gè),像第一種方法手動(dòng)找規(guī)律肯定是行不通的。

當(dāng)然,還有萬(wàn)能的python庫(kù),fontTools,可以用python代碼來(lái)操作ttf文件。

這里我們用這個(gè)庫(kù)來(lái)進(jìn)行字體解密

三 建立映射關(guān)系

ttf文件無(wú)法直接打開(kāi),我們可以將其轉(zhuǎn)換成xml文件,并觀察有沒(méi)有什么規(guī)律。

?

觀察,cmap結(jié)點(diǎn)下存在對(duì)應(yīng)關(guān)系,code所示即為網(wǎng)頁(yè)上源碼形式。但是用getBestCmap()函數(shù)獲取后又變成十進(jìn)制的數(shù)了,所以需要用hex()函數(shù)將10進(jìn)制整數(shù)轉(zhuǎn)換成16進(jìn)制,以字符串形式表示成原來(lái)的行。另外第一行的map沒(méi)有用,需要?jiǎng)h除才能繼續(xù)解析。

第一次替換

?

第三次替換

到此還沒(méi)結(jié)束,觀察站點(diǎn),每個(gè)數(shù)據(jù)都有前綴&#x,所以我們還需進(jìn)行前綴替換。至此,映射關(guān)系就建立好了。

部分代碼

四 解密

得到映射關(guān)系后,我們就可以用映射表對(duì)獲取到的HTML源碼進(jìn)行清洗替換,之后就可以用爬蟲(chóng)正常爬取數(shù)據(jù)了。

?

這里觀察頁(yè)面結(jié)構(gòu),中規(guī)中矩,可以考慮用Beautiful Soup爬蟲(chóng)庫(kù)進(jìn)行爬取

?

之后,就得到我們想要的數(shù)據(jù)了,清洗匯總就可以進(jìn)行進(jìn)行數(shù)據(jù)分析了。

?

最后

爬蟲(chóng)不易

前端工程師也不易

大家記得要文明爬蟲(chóng)

也歡迎大家關(guān)注我的公眾號(hào)【數(shù)據(jù)自留地】

每周更多爬蟲(chóng)、數(shù)據(jù)分析干貨

?

總結(jié)

以上是生活随笔為你收集整理的前端电子表数字字体_爬虫:如何优雅应对字体反爬的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。