反擊爬蟲,前端工程師的腦洞能夠有多大?

對於一張網頁,咱們每每但願它是結構良好,內容清晰的,這樣搜索引擎才能準確地認知它。 而反過來,又有一些情景,咱們不但願內容能被輕易獲取,css

  1. 前言 比方說電商網站的交易額,教育網站的題目等。由於這些內容,每每是一個產品的生命線,必須作到有效地保護。這就是爬蟲與反爬蟲這一話題的由來。
  2. 常見反爬蟲策略 可是世界上沒有一個網站,能作到完美地反爬蟲。 若是頁面但願能在用戶面前正常展現,同時又不給爬蟲機會,就必需要作到識別真人與機器人。所以工程師們作了各類嘗試,這些策略大多采用於 後端,也是目前比較常規單有效的手段,好比: User-Agent + Referer 檢測 帳號及Cookie驗證 驗證碼 IP限制頻次 而爬蟲是能夠無限逼近於真人的,好比: chrome headless或phantomjs來模擬瀏覽器環境 tesseract 識別驗證碼 代理IP淘寶就能買到 因此咱們說,100%的反爬蟲策略?不存在的。 更多的是體力活,是個難易程度的問題。 不過做爲前端工程師,咱們能夠增長一下游戲難度,設計出一些很(sang)有(xin)意(bing)思(kuang)的反爬蟲策略。
  3. 前端與反爬蟲 3.1 FONT-FACE拼湊式 例子: 貓眼電影 貓眼電影裏,對於票房數據,展現的並非純粹的數字。 頁面使用了font-face定義了字符集,並經過unicode去映射展現。也就是說,除去圖像識別,必須同時爬取字符集,才能識別出數字。

而且,每次刷新頁面,字符集的url都是有變化的,無疑更大難度地增長了爬取成本。html

3.2 BACKGROUND 拼湊式 例子: 美團 與font的策略相似,美團裏用到的是background拼湊。數字實際上是圖片,根據不一樣的background偏移,顯示出不一樣的字符。前端

而且不一樣頁面,圖片的字符排序也是有區別的。不過理論上只需生成0-9與小數點,爲什麼有重複字符就不是很懂。 頁面A:java

頁面B:程序員

3.3 字符穿插式 例子:微信公衆號文章 某些微信公衆號的文章裏,穿插了各類迷之字符,而且經過樣式把這些字符隱藏掉。 這種方式雖然使人震驚…但其實沒有太大的識別與過濾難度,甚至能夠作得更好,不過也算是一種腦洞吧。面試

對了,個人手機流量能夠找誰報銷嗎? 3.4 僞元素隱藏式 例子:汽車之家 汽車之家裏,把關鍵的廠商信息,作到了僞元素的content裏。 這也是一種思路:爬取網頁,必須得解析css,須要拿到僞元素的content,這就提高了爬蟲的難度。chrome

3.5 元素定位覆蓋式 例子:去哪兒 還有熱愛數學的去哪兒,對於一個4位數字的機票價格,先用四個 i 標籤渲染,再用兩個 b 標籤去絕對定位偏移量,覆蓋故意展現錯誤的 i 標籤,最後在視覺上造成正確的價格…後端

這說明爬蟲會解析css還不行,還得會作數學題。 3.6 IFRAME異步加載式 例子:網易雲音樂 網易雲音樂頁面一打開,html源碼裏幾乎只有一個 iframe ,而且它的src是空白的: about:blank 。接着js開始運行,把整個頁面的框架異步塞到了iframe裏面…瀏覽器

不過這個方式帶來的難度並不大,只是在異步與iframe處理上繞了個彎(或者有其餘緣由,不徹底是基於反爬蟲考慮),不管你是用selenium仍是phantom,都有API能夠拿到iframe裏面的content信息。 3.7 字符分割式 例子:全網代理IP 在一些展現代理IP信息的頁面,對於IP的保護也是大費周折。微信

他們會先把IP的數字與符號分割成dom節點,再在中間插入迷惑人的數字,若是爬蟲不知道這個策略,還會覺得本身成功拿到了數值;不過若是爬蟲注意到,就很好解決了。 3.8 字符集替換式 例子:去哪兒移動側 一樣會欺騙爬蟲的還有去哪兒的移動版。

html裏明明寫的3211,視覺上展現的倒是1233。原來他們從新定義了字符集,3與1的順序恰好調換得來的結果…

若是你也想在IT行業拿高薪,能夠參加咱們的訓練營課程,選擇最適合本身的課程學習,技術大牛親授,7個月後,進入名企拿高薪。咱們的課程內容有:Java工程化、高性能及分佈式、高性能、深刻淺出。高架構。性能調優、Spring,MyBatis,Netty源碼分析和大數據等多個知識點。若是你想拿高薪的,想學習的,想就業前景好的,想跟別人競爭能取得優點的,想進阿里面試但擔憂面試不過的,你均可以來,羣號爲: 454377428 注:加羣要求 一、具備1-5工做經驗的,面對目前流行的技術不知從何下手,須要突破技術瓶頸的能夠加。 二、在公司待久了,過得很安逸,但跳槽時面試碰壁。須要在短期內進修、跳槽拿高薪的能夠加。 三、若是沒有工做經驗,但基礎很是紮實,對java工做機制,經常使用設計思想,經常使用java開發框架掌握熟練的,能夠加。 四、以爲本身很牛B,通常需求都能搞定。可是所學的知識點沒有系統化,很難在技術領域繼續突破的能夠加。 5.阿里Java高級大牛直播講解知識點,分享知識,多年工做經驗的梳理和總結,帶着你們全面、科學地創建本身的技術體系和技術認知! 6.小號或者小白之類加羣一概不給過,謝謝。 目標已經有了,下面就看行動了!記住:學習永遠是本身的事情,你不學時間也不會多,你學了有時候卻可以使用本身學到的知識換得更多自由自在的美好時光!時間是生命的基本組成部分,也是萬物存在的根本尺度,咱們的時間在那裏咱們的生活就在那裏!咱們價值也將在那裏提高或消弭!Java程序員,加油吧

相關文章
相關標籤/搜索