圖1-意淫爬蟲與反爬蟲間的對決
數(shù)據(jù)的重要性
如今已然是大數(shù)據(jù)時代,數(shù)據(jù)正在驅(qū)動著業(yè)務(wù)開發(fā),驅(qū)動著運營手段,有了數(shù)據(jù)的支撐可以對用戶進行用戶畫像,個性化定制,數(shù)據(jù)可以指明方案設(shè)計和決策優(yōu)化方向,所以互聯(lián)網(wǎng)產(chǎn)品的開發(fā)都是離不開對數(shù)據(jù)的收集和分析,數(shù)據(jù)收集的一種是方式是通過上報API進行自身平臺用戶交互情況的捕獲,還有一種手段是通過開發(fā)爬蟲程序,爬取競品平臺的數(shù)據(jù),后面就重點說下爬蟲的應(yīng)用場景和實踐中會遇到的問題和反反爬蟲的一些套路與技巧。
應(yīng)用場景
互聯(lián)網(wǎng)平臺,偏向銷售公司,客戶信息的爬取
客戶信息的爬取可以釋放銷售人員尋找客戶資源的時間,提高銷售對市場開發(fā)的效率
爬取相關(guān)平臺上的客戶信息,上報到CRM管理系統(tǒng),提供給銷售人員進行開發(fā)
資訊爬取并應(yīng)用到平臺業(yè)務(wù)中
經(jīng)常瀏覽資訊的時候會發(fā)現(xiàn)其實很多平臺的熱門資訊內(nèi)容都很相似,尊重版權(quán)的平臺,會標明來源出處
爬取資訊信息,應(yīng)用到資訊業(yè)務(wù)中,可以減輕資訊內(nèi)容編輯人員的壓力,如果不需要創(chuàng)造自己的內(nèi)容,也可全部托管給程序AI運營
競品公司重要數(shù)據(jù)挖掘分析與應(yīng)用
競品平臺重要業(yè)務(wù)數(shù)據(jù),如:汽車X家的車型信息,X哪兒的酒店信息,返X網(wǎng)的商品信息,... ...
爬取競品重要數(shù)據(jù),對數(shù)據(jù)進行篩選和處理,然后投入業(yè)務(wù)中展示,增加這塊業(yè)務(wù)數(shù)據(jù)量,減輕這塊資源的運營編輯的壓力
... ...
爬蟲開發(fā)
python開發(fā)爬蟲(推薦)
入門也比較簡單,代碼短小精干,各種便于爬蟲開發(fā)的模塊和框架
其他語言
很多語言也都可以開發(fā)爬蟲,但是均都不是很全面,根據(jù)實際技術(shù)棧和開發(fā)場景去使用,語言只是工具,思路才是通用的
爬蟲必備技巧
做爬蟲開發(fā),需要對WEB這塊有相對全面深入的理解,這樣后面遇到反爬蟲才能得心應(yīng)手,見招拆招
了解HTML
會使用HTML標簽構(gòu)造頁面,知道如何解析出DOM里標簽,提取想要的數(shù)據(jù)內(nèi)容
了解CSS
了解CSS,會解析出樣式里的數(shù)據(jù)內(nèi)容
了解JS
基本JS語法,能寫能讀懂,并了解JS庫:Jquery,Vue 等,可以對使用開發(fā)者工具調(diào)試JS
了解JSON
了解JSON數(shù)據(jù),會序列化和反序列化數(shù)據(jù),通過解析JSON對象獲取數(shù)據(jù)內(nèi)容
了解HTTP/HTTPS
能夠分析請求信息和響應(yīng)信息,可以通過代碼構(gòu)造請求
會正則解析
通過正則匹配出符合規(guī)則的字符串,提取想要的數(shù)據(jù)內(nèi)容
會數(shù)據(jù)庫操作
通過數(shù)據(jù)庫操作對爬取數(shù)據(jù)進行存儲,如:MYSQL語法
會使用抓包工具
瀏覽器F12開發(fā)者調(diào)試工具(推薦:谷歌),Network(網(wǎng)絡(luò))欄目可以獲取抓包信息
工具:Charles,F(xiàn)iddler (可抓包HTTPS,抓包APP)
通過抓包工具可以過濾出數(shù)據(jù)接口或者地址,并且分析請求信息和響應(yīng)信息,定位數(shù)據(jù)所在的字段或者HTML標簽
會使用開發(fā)者工具
瀏覽器F12開啟開發(fā)者工具
需要會使用開發(fā)者工具調(diào)試HTML,CSS,JS
會模擬請求
工具:Charles,F(xiàn)iddler,Postman
通過模擬請求,分析出請求需要那些必要的信息,如:參數(shù),COOKIE,請求頭,懂得怎么模擬請求就知道編碼的時候如何去構(gòu)造
能定位數(shù)據(jù)
數(shù)據(jù)在API中:前端/原生APP請求數(shù)據(jù)API,API返回數(shù)據(jù)大部分是JSON格式,然后渲染展示
數(shù)據(jù)在HTML中:查看頁面HTML源代碼,如果源代碼里有想要獲取的數(shù)據(jù),就說明在服務(wù)端已經(jīng)綁定好數(shù)據(jù)在HTML里
數(shù)據(jù)在JS代碼中:查看頁面HTML源代碼,如果獲取數(shù)據(jù)不在HTML里,又沒有請求數(shù)據(jù)API,可以看下數(shù)據(jù)是不是綁定到JS變量里
會部署
可以部署到Windows或者Linux服務(wù)器,使用工具進行爬蟲進程監(jiān)控,然后進行定時輪訓爬取
反爬蟲對抗技巧
反爬蟲可以分為
服務(wù)端限制
和前端限制
服務(wù)端限制
:服務(wù)器端行請求限制,防止爬蟲進行數(shù)據(jù)請求
前端限制
:前端通過CSS和HTML標簽進行干擾混淆關(guān)鍵數(shù)據(jù),防止爬蟲輕易獲取數(shù)據(jù)
設(shè)置請求頭(服務(wù)端限制)
Referer
User-Agent
... ...
簽名規(guī)則(服務(wù)端限制)
如果是JS發(fā)起的請求,簽名規(guī)則可以在JS函數(shù)中找到,然后再根據(jù)規(guī)則去構(gòu)造簽名
如果是APP發(fā)起的請求,可能是前端調(diào)用原生封裝的方法,或者原生發(fā)起的,這個就比較無解,需要反編譯APP包,也不一定能成功
延遲,或者隨機延遲(服務(wù)端限制)
如果請求被限制,建議可以試試請求延遲,具體延遲xxx毫秒/x秒,根據(jù)實際情況設(shè)定合適的時間
代理IP(服務(wù)端限制)
如果延遲請求還是被限制,或者需要延遲很長時間才不會被限制,那就可以考慮使用代理IP,根據(jù)實際場景與限制的規(guī)律去運用,一般只要被限制的時候就切換請求的代理IP,這樣就基本可以繞過限制
目前有很多收費的代理IP服務(wù)平臺,有各種服務(wù)方式,具體可以搜索了解下,費用一般都在可以接受的范圍
登錄限制(服務(wù)端限制)
請求帶上登錄用戶的COOKIE信息
如果登錄用戶COOKIE信息會在固定周期內(nèi)失效,那就要找到登錄接口,模擬登錄,存儲COOKIE,然后再發(fā)起數(shù)據(jù)請求,COOKIE失效后重新這個步驟
驗證碼限制(服務(wù)端限制)
簡單驗證碼,對圖片里的字母或者數(shù)字進行識別讀取,使用識圖的模塊包可以實現(xiàn)
復雜驗證碼,無法通過識圖識別,可以考慮使用第三方收費服務(wù)
CSS/HTML混淆干擾限制(前端限制)
前端通過CSS或者HTML標簽進行干擾混淆關(guān)鍵數(shù)據(jù),破解需要抽樣分析,找到規(guī)則,然后替換成正確的數(shù)據(jù)
1 .font-face,自定義字體干擾
如列子:汽車X家論帖子,貓X電影電影評分
破解思路:
找到ttf字體文件地址,然后下載下來,使用font解析模塊包對ttf文件進行解析,可以解析出一個字體編碼的集合,與dom里的文字編碼進行映射,然后根據(jù)編碼在ttf里的序號進行映射出中文
可以使用FontForge/FontCreator工具打開ttf文件進行分析
2 .偽元素隱藏式
通過偽元素來顯示重要數(shù)據(jù)內(nèi)容
如例子:汽車X家
破解思路:
找到樣式文件,然后根據(jù)HTML標簽里class名稱,匹配出CSS里對應(yīng)class中content的內(nèi)容進行替換
3 .backgroud-image
通過背景圖片的position位置偏移量,顯示數(shù)字/符號,如:價格,評分等
根據(jù)backgroud-postion值和圖片數(shù)字進行映射
4 .html標簽干擾
通過在重要數(shù)據(jù)的標簽里加入一些有的沒的隱藏內(nèi)容的標簽,干擾數(shù)據(jù)的獲取
如例子:xxIP代理平臺
破解思路:
過濾掉干擾混淆的HTML標簽,或者只讀取有效數(shù)據(jù)的HTML標簽的內(nèi)容
... ... (反爬蟲腦洞有多大,反反爬蟲拆招思路就有多淫蕩)
防止投毒
有些平臺發(fā)現(xiàn)爬蟲后并不會進行限制封殺,而是給爬蟲提供誤導的數(shù)據(jù),影響競品公司進行錯誤的決策,這就是投毒
為了防止被投毒,需要對數(shù)據(jù)進行抽樣校驗
總結(jié)
目前大部分中小平臺對防御爬蟲的意識還比較薄弱,促使了爬蟲的盛行,通過爬蟲可以用比較小的代價,獲取更大的利益
競品數(shù)據(jù)的挖掘分析與應(yīng)用對于業(yè)務(wù)增長有著舉足輕重的作用,爬蟲開發(fā)對于互聯(lián)網(wǎng)產(chǎn)品公司的來說是個必不可少的技術(shù)
當前并沒有一種可以完全避免爬蟲的技術(shù),所以添加反爬蟲策略只是增加了一定的難度門檻,只要拆招技術(shù)夠硬還是可以被突破翻越
反爬蟲和反反爬蟲是技術(shù)之間的較量,這場沒有硝煙的戰(zhàn)爭永不停息。(程序員何必為難程序員)
供參考代碼
font解析 C#和Python實現(xiàn)
C#
python