前些日子仁锯,爬取起點(diǎn)中文網(wǎng)的過(guò)程中仙蚜,發(fā)現(xiàn)代碼沒(méi)有錯(cuò)此洲,是根據(jù)書(shū)上的教程來(lái)的,結(jié)果爬下的小說(shuō)字?jǐn)?shù)不對(duì)鳍征,百思不得其解黍翎。
百度了一下終于知道這是反爬蟲(chóng)。
首先來(lái)看一下反爬蟲(chóng)的概念:
網(wǎng)絡(luò)爬蟲(chóng)艳丛,是一個(gè)自動(dòng)提取網(wǎng)頁(yè)的程序,它為搜索引擎從萬(wàn)維網(wǎng)上下載網(wǎng)頁(yè)趟紊,是搜索引擎的重要組成氮双。
但是當(dāng)網(wǎng)絡(luò)爬蟲(chóng)被濫用后,互聯(lián)網(wǎng)上就出現(xiàn)太多同質(zhì)的東西霎匈,原創(chuàng)得不到保護(hù)戴差。
于是,很多網(wǎng)站開(kāi)始反網(wǎng)絡(luò)爬蟲(chóng),想方設(shè)法保護(hù)自己的內(nèi)容铛嘱。
他們根據(jù)ip訪問(wèn)頻率暖释,瀏覽網(wǎng)頁(yè)速度,賬戶登錄墨吓,輸入驗(yàn)證碼球匕,flash封裝,ajax混淆帖烘,js加密亮曹,圖片,css混淆等五花八門(mén)的技術(shù)秘症,來(lái)對(duì)反網(wǎng)絡(luò)爬蟲(chóng)照卦。
防的一方不惜工本,迫使抓的一方在考慮成本效益后放棄
抓的一方不惜工本乡摹,防的一方在考慮用戶流失后放棄
參考: 美國(guó)高級(jí)情報(bào)官員透露,美國(guó)國(guó)家安全局前雇員斯諾登僅僅是利用普通的網(wǎng)絡(luò)爬蟲(chóng)軟件(Webcrawler),從國(guó)安局網(wǎng)絡(luò)里面截取大量的機(jī)密文件與資料.
反網(wǎng)絡(luò)爬蟲(chóng):越來(lái)越成為一種新的行業(yè)
反爬蟲(chóng)概念 役耕。(詞條來(lái)自百度百科A范浴)
由此可以判斷是對(duì)面的網(wǎng)站做的反爬蟲(chóng)措施了酿联,通過(guò)百度知道這是字體反爬蟲(chóng)饥悴。什么叫字體反爬蟲(chóng)究西?
字體反爬蟲(chóng):在網(wǎng)頁(yè)中的關(guān)鍵部分中采用自定義的字體來(lái)顯示,防止爬蟲(chóng)爬取到關(guān)鍵信息图云。
采用自定義字體文件是CSS3特性惯悠,可參考CSS3字體。
這是網(wǎng)友的見(jiàn)解竣况。(ps:比我高明多了)
字體反爬也就是自定義字體反爬克婶,通過(guò)調(diào)用自定義的ttf文件來(lái)渲染網(wǎng)頁(yè)中的文字,而網(wǎng)頁(yè)中的文字不再是文字丹泉,而是相應(yīng)的字體編碼情萤,通過(guò)復(fù)制或者簡(jiǎn)單的采集是無(wú)法采集到編碼后的文字內(nèi)容!
總結(jié)字體反爬蟲(chóng)有三種方法:請(qǐng)讓我一一道來(lái):
- 自定義字體文件摹恨。字的在字體文件中的編碼固定不變筋岛,唯一對(duì)應(yīng)。這樣爬蟲(chóng)采集到信息在關(guān)鍵處就會(huì)顯示亂碼晒哄。
別以為萬(wàn)事大吉了睁宰,破解這可是小菜一碟。(當(dāng)初攔了我一個(gè)星期/哭臉)
破解之道:通過(guò)fonttools(python工具)將ttf文件轉(zhuǎn)成ttx文件打開(kāi)后寝凌,就可以看到編碼與字的對(duì)應(yīng)關(guān)系柒傻,然后嘛,就把網(wǎng)頁(yè)中的亂碼部分的“編碼”替換成對(duì)應(yīng)的字较木。大功告成了红符!
- 好吧,你利害 伐债,那我再升級(jí)就是了预侯。讓字的編碼隨機(jī)變化,但字體信息不變峰锁,瀏覽器渲染出來(lái)的字還能正常顯示萎馅,同時(shí)每個(gè)網(wǎng)頁(yè)加載時(shí)都隨機(jī)自帶一套字體。這樣祖今,每個(gè)字的編碼順序都是變化的校坑,就無(wú)法用替換的方法來(lái)解決了。
千萬(wàn)別得意千诬,這樣的方法也不是萬(wàn)能的耍目!雖然我們打亂了關(guān)鍵字的編碼順序,但是每個(gè)字對(duì)應(yīng)的字體信息是不變的徐绑,字體中的字的每一筆劃都有相應(yīng)的x邪驮、y坐標(biāo)信息,瀏覽器正是根據(jù)這些筆劃信息渲染出對(duì)應(yīng)的字的傲茄,看圖:
爬蟲(chóng)先手動(dòng)下載了一個(gè)ttf文件毅访,然后根據(jù)ttf文件中的文字圖形位置在爬蟲(chóng)代碼中做一個(gè)映射沮榜,然后使用程序動(dòng)態(tài)獲取采集信息,使用fonttools來(lái)循環(huán)對(duì)比本地之前下載的標(biāo)本中的字體信息喻粹,對(duì)比一直蟆融,那就是某一個(gè)字,如此一來(lái)守呜,反爬就輕松被破了型酥。
- 這樣也不是萬(wàn)能的嘛,Python有個(gè)庫(kù)叫Selenium查乒,可以驅(qū)動(dòng)瀏覽器進(jìn)行爬取弥喉,而且爬取的內(nèi)容是基于瀏覽器已經(jīng)渲染后的結(jié)果,這樣就不會(huì)遇見(jiàn)亂碼的情況了玛迄。但代價(jià)就是驅(qū)動(dòng)瀏覽器進(jìn)行爬取比較慢由境。時(shí)間成本就上升了。(已經(jīng)有朋友成功了)還有就是ocr 識(shí)別了(這個(gè)只是聽(tīng)說(shuō)蓖议,并不了解虏杰,這里就不作闡述。)
PS:本文主要借鑒反爬終極方案總結(jié)—字體反爬
如有侵權(quán)勒虾,請(qǐng)及時(shí)聯(lián)系本人嘹屯。