1、什么是網路爬蟲?

其實 “網路爬蟲”這個概念非常簡單,首先回想一下人類是怎么上網的?第一步是打開瀏覽器,輸入網址,點擊各種鏈接,獲取各種資訊,然后通過一個鏈接又跳轉到另一個鏈接?本質上來說網路爬蟲跟人類上網的流程是一回事,不同的只是主體從人變成了計算機程式,爬蟲就是這樣一種程式,它通過訪問各種網站的鏈接,讀取頁面的資訊,然后又順著鏈接跳轉到別的地方,繼續獲取資訊,
2、網路爬蟲有什么用?

網路爬蟲最早是運用在搜索引擎上的,例如百度谷歌,當我們向搜索引擎輸入一個關鍵字后,引擎會反饋會一大堆相關的結果給我們,那么這些結果是怎么來的?這就是爬蟲的功勞,搜索引擎通過釋放規模龐大的爬蟲程式,目的就是要盡可能地將整個網路的各種資訊索取回來拓展他們的資料庫內容儲備,
要知道在沒有爬蟲之前,早期的搜索引擎例如Yahoo之類,是通過所謂 “收錄” 方式擴充其資料庫內容的,即作為網站首先要向Yahoo發出申請,將網站的主題濃縮成幾個關鍵字,只有當Yahoo收錄了你這條記錄后,才會將你的網站與這個關鍵字掛上號,當用戶搜索這個關鍵字的時候,你的網站才能呈現給搜索者,
想想看這種模式跟爬蟲的區別?一個是被動接受,另一個是主動出擊,效率當然不可同日而語,
Google的崛起,與他早年開發的高效率爬蟲程式有直接關系,
除了像搜索引擎公司這種大規模的爬蟲,隨著大資料的興起,在做資料挖掘的時候也需要用到爬蟲,否則所謂大資料分析就是巧婦難為無米之炊,
3、爬與反爬

作為網站運營方而言,他們并不排斥搜索引擎的爬蟲到訪,因為這可以提高網站被訪問的權重,但對于那些僅僅出于資料采集的爬蟲,就不是那么受歡迎了,因為爬蟲程式可以通過并發技術,在短時間內組建一支規模龐大的訪問大軍,短時間內就可以榨干網站的資訊,加重服務器負擔的同時又不會給網站帶來明顯的好處(畢竟爬蟲可不是潛在客戶),對于網站運營方來說這是一種資源空耗,于是,就有了反爬蟲,
4、 爬蟲的實作方式
-
第一種是通過直接發送http request方式,這種方式跟瀏覽器無關,程式只需仿造一個http資料包發送到目標服務器,然后就能接收從服務器回傳的HTML網頁代碼,最后通過拆解HTML源代碼的方式獲取其中有用的內容,我們姑且稱這種方式為直連方式吧,
因為沒有瀏覽器的介入,資料是直來直往的,無需渲染或腳本決議,所以這種方法效率很高,
缺點是反爬能力差,比較難以繞開驗證碼這道門檻, -
第二種方式是模擬人類上網的行為來實作,有這樣一種瀏覽器,它接受代碼的控制,比如說你向它發送“get taobao.com”指令,它就會打開淘寶網站,其實說白了,這種方式像極了用 “按鍵精靈” 來模擬上網,我們姑且把它稱為按鍵精靈模式吧,
因為資料的發送和接收,都需要瀏覽器介入,所以這種方法效率不行,
優點是反爬能力很強,網站比較難判斷出訪問者到底是真人還是程式, -
第三種方式無論從原理還是實作來說都不能稱之為“爬蟲”,但它確實也能起到爬蟲的作用,姑且把這種方式也算進來吧,一些大網站因為業務需要,又或者覺得與其讓爬蟲大軍消耗服務器資源,干脆直接把內容開放出來得了,這就是所謂的第三方API,像阿里開放平臺或者一些能提供天氣資訊的網站就是如此,
通過這種方式交換的資料很純粹,因為沒有冗余的HTML代碼,因此效率極高,另外還不需要擔心反爬這個問題,
缺點顯而易見,并不是每個網站都提供API,此外,即使提供的,很多也需要付費,
5、淘寶網的反爬變遷

淘寶網作為一個在線電商的寡頭,他家的資料非常吸引人,大到某類商品的整體走勢,小到一個訂單的具體內容,都是爬蟲的目標,相應的,淘寶網的反爬手段也是逐年在進化的,
注意:本文所討論的反爬,主要是針對那種需要登錄才能進行操作的爬蟲,對于那些僅僅是為了爬取公開內容而不需要登錄的爬蟲,不在討論范圍,
-
上古蠻荒時期,我不確定他們有沒有專門的反爬部門,但在那時候可以通過定制一個包含了賬戶和密碼的http資料包,然后硬塞給服務器,就能成功登錄,非常簡單粗暴,
-
大概到了2010年代,隨著驗證碼和滑塊的出現,這種野蠻的方法就失靈了,因為在我們仿造的http資料包中,光有賬戶密碼還不行,必須知道驗證碼的內容,或者用滑鼠滑一下滑塊到指定位置,這二者目的是一樣的:通過一個即時生成的附加內容(驗證碼或滑塊),然后將這個附加內容以一個引數方式包裹進http資料包再發送到服務器端,服務器才認為這個請求是有效的,要命的是,通過直接發送http資料包的直連方式,由于壓根就沒有瀏覽器的支持,根本連驗證碼長什么樣都不知道(更勿論破解了),同理也沒辦法對滑塊進行操作,可以說驗證碼的誕生,宣告了這種直連型爬蟲的暫時失效,
-
為什么說是“暫時”失效呢,因為后來直連型爬蟲又找到一種新的方法,那就是“半自動化”登錄,即第一次登錄的時候,由人類完成,正常輸入賬號密碼,包括驗證碼滑塊之類,登錄成功后,記錄下當前Cookies,然后將這些已經登錄成功的Cookies包裹進一個新建的http資料包里再將這個資料包發送給服務器,因為在截取這個Cookies的時候,是驗證碼已經通過了之后的,這樣一來,服務器便只能認為此后的所有請求都是合法請求了,
-
這種方法湊效了挺長一段時間,但后來也失效了,或者說通過仿造http資料包進行登錄操作這種方式也給判了個死刑,大概在2017還是2018年前后,阿里搞了一個名叫 “霸下-七層流量清洗” 的系統,從那時候起淘寶網在它的Cookies里增加了幾個隨時在變化的欄位,每一次請求這些欄位都會發生改變,換句話說現在的淘寶網Cookies是一個“動態”Cookies,企圖用一個靜態的Cookies去模擬登錄淘寶,哪怕這個Cookies是合理合法的也不行,因為這個“合法”Cookies只代表了過去某個時間點的合法Cookies,而非當下,
那么淘寶網是如何實作這個動態Cookies的呢,以下內容純屬推測:
也許是根據滑鼠的軌跡,根據點擊的X,Y坐標等等,將這些客觀資料作為初始變數,然后再通過一個演算法將這些變數整合為一個token,最后提交到服務器,這里面最核心的就是這個token的演算法,這應該是淘寶網的高度機密,外人是無從得知的,也就意味著你沒辦法自行換算出一個能被淘寶服務器所認可的合法token來,再者,淘寶這套演算法的輸入變數到底是不是滑鼠軌跡等等,都是瞎猜的,破解更是無從談起,
-
那么路是不是就給堵死了呢,答案當然是否定的,現在需要祭出我們的 “按鍵精靈” 了,通過腳本對一個真實瀏覽器進行控制,讓他模擬人的上網行為,這種爬蟲對服務器而言比較難以對付,首先,它可以模擬隨機的按鍵延時、滑鼠軌跡等等,服務器很難區分哪些是人類做出的動作,哪些又是腳本的,即使我們將技術細節放一邊,最要命的是對于服務器而言,這是一個兩難的選擇:
- 寬松的規則,縱容了爬蟲;
- 嚴苛的規則,又可能對真實的人類客戶造成誤傷,降低用戶體驗,
目前看來,淘寶網對這種模擬人類上網行為的“按鍵精靈”式爬蟲確實也沒有什么革命性的方案,或者說沒有從技術上實作一種徹底根治的手段,而只能在規則的嚴苛程度上做出或松或緊的權衡,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/289905.html
標籤:其他
