1 .識別真人和機(jī)器人
后端方面
1 .user-agent+referer檢測
2 .賬號以及cookie驗(yàn)證
3 .驗(yàn)證碼
4 .ip限制頻率
5 .進(jìn)行瀏覽器檢測,如果不是瀏覽器則死掉晨汹。
6 .就是檢查他的機(jī)器性能一定是個(gè)真人用戶豹储。
無限接近真人的爬蟲
1 .puppeter:模擬瀏覽器環(huán)境,效率問題
2 .代理ip
3 .識別驗(yàn)證碼
4 .直接網(wǎng)頁截圖淘这,然后識別圖片中的文字剥扣,你是根本沒法攔截的。
前端方面
font-face拼湊式
1 .font-face定義了字符集铝穷,通過unicode去印射展示钠怯。
2 .font-face加載網(wǎng)絡(luò)字體,我么可以自己創(chuàng)建一套字體曙聂,然后自定義一套字符映射關(guān)系表例如設(shè)置0xefab是映射字符1晦炊,0xeba2是映射字符2,以此類推宁脊。當(dāng)需要顯示字符1時(shí)断国,網(wǎng)頁的源碼只會(huì)是0xefab,被采集的也只會(huì)是 0xefab朦佩,并不是1
3 .但是對于正常的用戶來說則沒有影響并思,因?yàn)闉g覽器會(huì)加載css的font字體為我們渲染好,實(shí)時(shí)顯示在網(wǎng)頁中语稠。
4 .所以我們需要做的是,如何在判斷請求web字體的是機(jī)器人或者是真人,也就是說仙畦,攔截被收斂到了這一個(gè)地方
5 .定期更新一批字體文件和映射表來加大難度
6 .他這個(gè)破解也很簡單输涕,需要一下人工,讀出那個(gè)請求html文件對應(yīng)數(shù)字的unicode,自己把那個(gè)表更新一下慨畸,轉(zhuǎn)換那個(gè)部分可以做成自動(dòng)的莱坎,還是可以用的。自己手動(dòng)看一下1-9對應(yīng)的unicode
backgrodun 偏移顯示
1 .與font的策略類似寸士,美團(tuán)里用到的是background拼湊檐什。數(shù)字其實(shí)是圖片,根據(jù)不同的background偏移弱卡,顯示出不同的字符
2 .實(shí)際上看好像并不是這樣
3 .利用css來混淆視聽乃正,正常用戶可以看到,但是代碼上顯示是錯(cuò)誤的婶博,人可以讀懂瓮具,但是機(jī)器不能讀懂
4 .網(wǎng)頁所見非所得
5 .對返回的數(shù)組進(jìn)行解碼,比如進(jìn)行線性變化https://github.com/FantasticLBP/Anti-WebSpider,這個(gè)是可以從接口方面進(jìn)行杜絕的凡人。
6 .
微信
1 .在原本的內(nèi)容里面添加很多的其他內(nèi)容名党,然后通過css樣式影藏起來
2 .
汽車之家
1 .把關(guān)鍵信息,放在偽元素的content里面挠轴,這樣解析的時(shí)候传睹,就必須拿到偽元素的content,提升了爬蟲難度岸晦。
2 .瀏覽網(wǎng)頁好像是直接顯示的欧啤,但是這有一個(gè)問題,這種html代碼怎么用框架寫啊委煤,vue怎么在css的content里面顯示價(jià)格
去哪兒
1 .隨便顯示一個(gè)四位數(shù)的價(jià)格堂油,然后在用兩個(gè)b標(biāo)簽把錯(cuò)誤的數(shù)字覆蓋,這樣需要結(jié)合css來算他的價(jià)格
2 .雙11的淘寶和jd都沒有做價(jià)格保護(hù)
canvas指紋
1 .在繪制canvas圖片的時(shí)候碧绞,不同機(jī)器府框,不同瀏覽器繪制的圖片特征是相同并且獨(dú)一無二的,這樣的讥邻,只要提取最簡單的md5值便可以唯一標(biāo)識和跟蹤這個(gè)用戶
2 .在圖片格式上迫靖,不同的web瀏覽器使用了不同的圖形處理引擎,不同的圖片導(dǎo)出項(xiàng)兴使,不同的默認(rèn)壓縮等級
3 .在像素級別上系宜,操作系統(tǒng)各自使用了不同的設(shè)置和算法來進(jìn)行抗鋸齒和子像素級別的渲染操作
4 .操作系統(tǒng)的分辨率,瀏覽器版本发魄,安裝瀏覽器插件盹牧,操作系統(tǒng)的分辨率俩垃,下載的字體,所在時(shí)區(qū)和其他信息汰寓。每110萬人中口柳,才會(huì)有一個(gè)人的瀏覽器跟你有一樣的設(shè)置。
瀏覽器http請求中的用戶代理-navigator.userAgent
瀏覽器的語言(中文有滑、英文……)-navigator.language
設(shè)備屏幕的色彩信息-screen.colorDepth
設(shè)備屏幕的寬高-screen.height screen.width
格林威治時(shí)間和本地時(shí)間之間的時(shí)差-Date().getTimezoneOffset()
是否支持sessionStorage-window.sessionStorage
是否支持localStorage-window.localStorage
是否支持indexdDB-window.indexedDB
是否支持-docment.body.addBehavior(IE5的一個(gè)屬性)
是否支持調(diào)用本地?cái)?shù)據(jù)庫-window.openDatabase
瀏覽器所在系統(tǒng)的CPU等級-navigator.cupClass
客戶端的操作系統(tǒng)-navigator.platform
是否支持Do not track功能-navigator.doNotTrack
獲取瀏覽器部分插件信息-flash plugin跃闹、Adobe PDF reader、QuickTime毛好、real players望艺、ShockWave player、Windows media player肌访、Silverlight找默、Skype
canvas指紋
4 .也就是說要充分了解瀏覽器的屬性,才能找到破解指紋的原因。
用vue寫的價(jià)格顯示組件
1 .功能