爬蟲技術的前世今生、善與惡,這篇文章給說透了

爬蟲技術的前世今生、善與惡,這篇文章給說透了

“放下你手裡的代碼,小心被抓。”

最近程序員圈子不乏這樣的戲謔調侃。

原因是最近發生的多起涉及爬蟲技術的公司被司法部門調查。近日,51信用卡被查,更是將暴力催收背後非法使用爬蟲技術爬取個人隱私數據的醜行,暴露在陽光之下。

一時間,“爬蟲”成為眾矢之的,一些公司緊急下架了爬蟲相關的招聘信息,給大數據風控、人工智能從業者帶來些許恐慌,頭髮又多落了幾根。

實際上,大部分人都聽說過爬蟲,認為爬蟲就是到人家網站上去爬東西、偷數據,有些人甚至認為只要有爬蟲,什麼數據都可以搞到。

今天,我們就打開爬蟲這個“工具箱”,把涉及到的技術盲區放到燈光下,讓大家可以清楚地看下。下面,本文就從這個角度來聊聊爬蟲這個熟悉而又陌生的技術。

爬蟲的技術原理

搜索引擎收集網上信息的主要手段就是網絡爬蟲(也叫網頁蜘蛛、網絡機器人)。它是一種“自動化瀏覽網絡”的程序,按照一定的規則,自動抓取互聯網信息,比如:網頁、各類文檔、圖片、音頻、視頻等。搜索引擎通過索引技術組織這些信息,根據用戶的查詢,快速地提供搜索結果。

設想一下,我們平時瀏覽網頁的時候會怎麼做?

一般情況下,首先,會用瀏覽器打開一個網站的主頁,在頁面上尋找感興趣的內容,然後點擊本站或其它網站在該網頁上的鏈接,跳轉到新的網頁,閱讀內容,如此循環往復。如下圖所示:

爬蟲技術的前世今生、善與惡,這篇文章給說透了

圖中的虛線圓角矩形代表一個網站,每個實線矩形表示一個網頁。可以看到,每個網站一般以首頁為入口,該首頁鏈接到幾個、幾萬個、甚至上千萬個的內部網頁。同時,這些網頁往往又鏈接了很多外部網站。例如,用戶從蘇寧金融的網頁為起點,瀏覽發現了PP視頻的鏈接,點擊後跳轉到了PP視頻主頁,作為體育愛好者,在體育頻道中找到了相關的新浪微博的內容,再次點擊後又來到微博的頁面繼續閱讀,從而形成了一條路徑。如果把所有的可能路徑呈現出來,就會看到一個網絡結構。

網絡爬蟲模擬了人們瀏覽網頁的行為,只是用程序代替了人類的操作,在廣度和深度上遍歷網頁。如果把互聯網上的網頁或網站理解為一個個節點,大量的網頁或網站通過超鏈接形成網狀結構。爬蟲通過遍歷網頁上的鏈接,從一個節點跳轉到下一個節點,就像是在一張巨大的網上爬行,但是比人類的速度更快,跳轉的節點更全面,所以被形象地稱為網絡爬蟲或網絡蜘蛛。

爬蟲的發展歷史

網絡爬蟲最早的用途是服務於搜索引擎的數據收集,而現代意義上的搜索引擎的鼻祖是1990年由加拿大麥吉爾大學(University of McGill)學生Alan Emtage發明的的Archie。

人們使用FTP服務器共享交流資源,大量的文件散佈在各個FTP主機上,查詢起來非常不方便。因此,他開發了一個可以按照文件名查找文件的系統,能定期蒐集並分析FTP服務器上的文件名信息,自動索引這些文件。工作原理與現在的搜索引擎已經非常接近,依靠腳本程序自動搜索分散在各處FTP主機中的文件,然後對有關信息進行索引,供使用者以一定的表達式查詢。

世界上第一個網絡爬蟲“互聯網漫遊者”(“www wanderer”)是由麻省理工學院(MIT)的學生馬休·格雷(Matthew Gray)在 1993 年寫成。剛開始,它只用來統計互聯網上的服務器數量,後來則發展為能夠通過它檢索網站域名。

隨著互聯網的迅速發展,使得檢索所有新出現的網頁變得越來越困難,因此,在“互聯網漫遊者”基礎上,一些編程者將傳統的“蜘蛛”程序工作原理作了些改進。其設想是,既然所有網頁都可能有連向其他網站的鏈接,那麼從跟蹤一個網站的鏈接開始,就有可能檢索整個互聯網。

其後,無數的搜索引擎促使了爬蟲越寫越複雜,並逐漸向多策略、負載均衡及大規模增量抓取等方向發展。爬蟲的工作成果是搜索引擎能夠遍歷鏈接的網頁,甚至被刪除的網頁也可以通過“網頁快照”的功能訪問。

網絡爬蟲的禮儀

禮儀一:robots.txt文件

每個行業都有其Code of Conduct,成為行為準則或行為規範。比如,你是某個協會中的成員,那就必須遵守這個協會的行為準則,破壞了行為準則是要被踢出去的。

最簡單的例子,你加入的很多微信群,一般群主都會要求不可以私自發廣告,如果未經允許發了廣告,會被立刻踢出群,但是發紅包就沒事,這就是行為準則。

爬蟲也有行為準則。早在1994年,搜索引擎技術剛剛興起。那時的初創搜索引擎公司,比如AltaVista和DogPile,通過爬蟲技術來採集整個互聯網的資源,與Yahoo這樣的資源分類網站激烈競爭。隨著互聯網搜索規模的增長,爬蟲收集信息的能力快速進化,網站開始考慮對於搜索引擎爬取信息做出限制,於是robots.txt應運而生,成為爬蟲界的“君子協定”。

robots.txt文件是業內慣用做法,不是強制性的約束。robots.txt的形式如下:

爬蟲技術的前世今生、善與惡,這篇文章給說透了

在上面這個robots.txt例子中,所有的爬蟲都被禁止訪問網站的任意內容。但是Google的爬蟲機器人,可以訪問除了private位置的所有內容。如果一個網站上沒有robots.txt,是被認為默許爬蟲爬取所有信息。如果robots.txt做了訪問的限制,但是爬蟲卻沒有遵守,那就不是技術實現這麼簡單的事情了。

禮儀二:爬取吞吐量的控制

曾經出現假冒Google搜索引擎的爬蟲去對網站進行DDoS攻擊,讓網站癱瘓的事情。近年來,惡意爬蟲造成的DDoS攻擊行為有增無減,給大數據行業蒙上了爬蟲的陰影。因為其背後的惡意攻擊者,往往具備更為複雜和專業的技術,能繞過各種防禦機制,讓防範這樣攻擊行為難上加難。

禮儀三:做一個優雅的爬蟲

優雅的爬蟲背後,一定站著一個文明人或者一個文明團隊。他們會考慮自己寫的爬蟲程序是否符合robots.txt協議,是否會對被爬網站的性能造成影響,如何才能不侵害知識產權所有者的權益以及非常重要的個人隱私數據等問題。

出於能力的差別,並不是每個爬蟲團隊都能考慮到這些問題。2018年,歐盟出臺的《General Data Protection Regulation》(通用數據保護條例)中對數據的保護做出了嚴格的說明。2019年5月28日,國家互聯網信息辦公室發佈的《數據安全管理辦法》(徵求意見稿)對爬蟲和個人信息安全做出了非常嚴格的規定。比如:

(1)第十六條 網絡運營者採取自動化手段訪問收集網站數據,不得妨礙網站正常運行;此類行為嚴重影響網站運行,如自動化訪問收集流量超過網站日均流量三分之一,網站要求停止自動化訪問收集時,應當停止。

(2)第二十七條 網絡運營者向他人提供個人信息前,應當評估可能帶來的安全風險,並徵得個人信息主體同意。

其實,我國2017年6月1日施行的《中華人民共和國網絡安全法》第四章第四十一條和四十四條就已經對個人隱私信息數據的收集和使用做出明文規定,這也與爬蟲直接相關。

爬蟲技術的前世今生、善與惡,這篇文章給說透了

爬蟲技術的前世今生、善與惡,這篇文章給說透了

法律制度的出臺,給技術的邊界做出了明確的限定,技術無罪並不能作為技術實施者為自己開脫的理由。爬蟲在實現自己需求的同時,必須做到嚴格遵守行為準則和法律條例。

各類反爬蟲技術介紹

為了保護自己合法權益不被惡意侵害,不少網站和應用APP應用了大量的反爬技術。這使得爬蟲技術中又衍生出反反爬蟲技術,比如各類滑動拼圖、文字點選、圖標點選等驗證碼的破解,它們相互促進、相互發展、相互傷害著。

反爬蟲的關鍵在於阻止被爬蟲批量爬取網站內容,反爬蟲技術的核心在於不斷變更規則,變換各類驗證手段。

這類技術的發展甚至讓人痴迷,比DOTA對戰還讓人熱血沸騰。從那晃動如波浪的文字驗證碼圖形的偽裝色裡彷佛都能看得見程序員的頭髮。

1、圖片/Flash

這是比較常見的反爬手段,將關鍵數據轉為圖片,並添加上水印,即使使用了OCR(Optical Character Recognition,文字識別)也無法識別出來,讓爬蟲端獲取了圖片也得不到信息。早期一些電商的價格標籤中經常見到這種方式。

2、JavaScript混淆技術

這是爬蟲程序員遇到最多的一種反爬方式,簡單來說其實就是一種障眼法,本質上還是一種加密技術。很多網頁中的數據是使用JavaScript程序來動態加載的,爬蟲在抓取這樣的網頁數據時,需要了解網頁是如何加載該數據的,這個過程被稱為逆向工程。為了防止被逆向工程,就用到JavaScript混淆技術,加JavaScript代碼進行加密,讓別人看不懂。不過這種方式屬於比較簡單的反爬方式,屬於爬蟲工程師練級的初級階段。

3、驗證碼

驗證碼是一種區分用戶是計算機還是人的公共全自動程序,也是我們經常遇到的一種網站訪問驗證方式,主要分為以下幾種:

(1)輸入式驗證碼

這是最最常見的,通過用戶輸入圖片中的字母、數字、漢子等字符進行驗證。

爬蟲技術的前世今生、善與惡,這篇文章給說透了

圖中CAPTCHA 的全名是(Completely Automated Public Turing test to tell Computers and Humans Apart),中文翻譯為:全自動區分計算機與人類的圖靈測試。實現的方式很簡單,就是問一個電腦答不出來但人類答得出來的問題。不過,現在的爬蟲往往會用深度學習技術對這樣的驗證碼進行破解,這樣的圖靈測試已經失效。

(2)滑塊式驗證碼

鑑於輸入式的圖形驗證碼的缺點,容易被破解,而且有時候人類都識別不了。滑塊驗證碼橫空出世,這種驗證碼操作簡便,破解難度大,很快就流行起來了。破解滑塊驗證碼存在兩大難點:一是必須知道圖形缺口在哪裡,也就是得知道滑塊滑到哪;二是要模仿出人類滑動的手勢。這樣的驗證碼增加了一定的難度,也給爬蟲界增加了很多樂趣,一時間大量破解滑塊驗證碼的技術出現。

爬蟲技術的前世今生、善與惡,這篇文章給說透了

(3)點擊式的圖文驗證和圖標選擇

圖文驗證,是通過文字提醒用戶點擊圖中相同字的位置進行驗證。

爬蟲技術的前世今生、善與惡,這篇文章給說透了

圖標選擇,是給出一組圖片,按要求點擊其中一張或者多張。

爬蟲技術的前世今生、善與惡,這篇文章給說透了

這兩種原理相似,只不過是一個給出文字,點擊圖片中的文字;一個給出圖片,點出符合內容的圖片。這兩種方法的共同點就是體驗差,被廣為詬病。

(4)手機驗證碼

對於一些重要的敏感信息訪問,網站或APP端一般會提供填寫手機驗證碼的要求,通過手機接受網站發送的驗證碼來進一步訪問,這種方式對於數據隱私的保護比較好。

4、賬號密碼登陸

網站可以通過賬號登陸來限制爬蟲的訪問權限,個人在使用很多網站服務的時候一般是需要進行賬號註冊的,使用的時候需要通過賬號密碼登陸才能繼續使用服務。網站可以利用用戶瀏覽器的Cookie來對用戶的身份進行識別,通過保存在用戶本地瀏覽器中加密的Cookie數據來進行用戶訪問會話的跟蹤。這一般作為前面幾種反爬方式的補充。

爬蟲技術的發展方向

傳統網絡爬蟲最大的應用場景是搜索引擎,普通的企業更多是做網站或應用。後來隨著網絡數據分析的需要,以及互聯網上的輿情事件層出不窮,針對網絡爬蟲有了大量的需求,採集的對象主要是些新聞資訊。

近些年,由於大數據處理和數據挖掘技術的發展,數據資產價值的概念深入人心,爬蟲技術得到更加廣泛和深入的發展,採集對象也更豐富,高性能、併發式的技術指標也更高。

圍繞網絡爬蟲合法性的討論仍然存在,情況也比較複雜。目前的趨勢下,許多法律問題還處於模糊地帶,往往取決於具體的案例影響。然而,可以肯定的是,只要有互聯網,就會有網絡爬蟲。只有網絡爬蟲讓體量巨大的互聯網變得可以搜索,使爆炸式增長的互聯網變得更加容易訪問和獲取,在可預見的未來,互聯網爬蟲技術將繼續得到發展。

互聯網作為人類歷史最大的知識倉庫,是非結構化或非標準化的。互聯網上聚集了大量的文本、圖片、多媒體等數據,內容雖然非常有價值,但是知識提取的難度仍然非常巨大。語義互聯網、知識共享等概念越來越普及,真正語義上的互聯網將是網絡爬蟲的目標。此外,物聯網技術的發展,將是互聯網的升級形式,也將是爬蟲技術未來發展的方向。

本期福利:近日,蘇寧金融研究院發佈了《互聯網金融三季度報告暨銀行金融科技子公司專題報告》《90後人群消費趨勢研究報告》,讀者可在“蘇寧財富資訊”公眾號後臺回覆“2019互聯網金融三季報”、“90後消費報告”,獲得網盤鏈接和提取碼~

本文由“蘇寧財富資訊”原創,作者為蘇寧金融研究院金融科技研究中心副主任沈春澤、研究員李加慶


分享到:


相關文章: