網際網路誕生之初,是為了讓人們更容易的分享資料、交流通訊。網際網路是橋樑,連線了世界各地的人們。網站的點選、瀏覽都是人為的,與你聊天的也是活生生的人。然而,隨著技術的發展,人們對資料的渴望,出現了各種網路機器人,這個時候,你不知道螢幕那端跟你聊天的是一個人還是一條狗,你也不知道你網站的瀏覽量是人點選出來的,還是機器爬出來的。
表面上看,網際網路上是各種各樣的人;暗地裡,已經佈滿了形形色色的網路爬蟲。
一、搜尋引擎時代的網路爬蟲
關於網路爬蟲的概念,我們先來瞅瞅維基百科(Wikipedia)上面的定義:
網路爬蟲(英語:web crawler),也叫網上蜘蛛(spider),是一種用來自動瀏覽全球資訊網的網路機器人。其目的一般為編纂網路索引。
這裡提到的編纂網路索引,就是搜尋引擎乾的事情。我們對搜尋引擎並不陌生,Google、百度等搜尋引擎可能每天都在幫我們快速獲得資訊。可能小猿們要問,搜尋引擎的工作過程是怎樣的呢?
首先,就是有網路爬蟲不斷抓取各個網站的網頁,存放到搜尋引擎的資料庫;
接著,索引程式讀取資料庫的網頁進行清理,建立倒排索引;
最後,搜尋程式接收使用者的查詢關鍵詞,去索引裡面找到相關內容,並透過一定的排序演算法(Pagerank等)把最相關最好的結果排在最前面呈現給使用者。
看上去簡簡單單的三個部分,卻構成了強大複雜的搜尋引擎系統。而網路爬蟲是其中最基礎也很重要的一部分,它決定著搜尋引擎資料的完整性和豐富性。我們也看到網路爬蟲的主要作用是獲取資料。
由此簡單地說,網路爬蟲就是獲取網際網路公開資料的自動化工具。
這裡要強調一下,網路爬蟲爬取的是網際網路上的公開資料,而不是透過特殊技術非法入侵到網站伺服器獲取的非公開資料。
那麼小猿們可能要問,什麼是“公開資料”呢?簡而言之,就是網站上公開讓使用者瀏覽、獲取的資料。
雖然資料是公開的,但是當某人或機構(如,搜尋引擎)大量收集這些資料並因此獲利時,也會讓資料生產方——網站很不爽,由此而產生法律糾紛。比如,早些年Google因此而惹上官司。
網站們看著搜尋引擎因為搜尋引擎抓取自己的內容而獲利不爽,但也因為搜尋引擎帶來的流量而高興不已,於是就出現了網站主動進行搜尋引擎最佳化(SEO, Search Engine Optimization),也就是告訴搜尋引擎,我這裡的內容好,快來抓取吧!
搜尋引擎和網站的博弈,催生了一個君子協議: robots.txt。網站在自己的網站上放上這個檔案,告訴爬蟲哪些內容可以抓,哪些內容不可以抓;搜尋引擎讀取網站的robots.txt來知道自己的抓取範圍,同時也在訪問網站時透過User-Agent來向網站表明自己的身份(這種表明也是君子協議,技術上很容易假扮他人),比如,Google的爬蟲叫做Googlebot,百度的爬蟲叫做Baiduspider。這樣,二者和平共處,互惠互利。
二、大資料時代的網路爬蟲
時代在發展,資料變得越來越重要,“大資料”已經成為各行各業討論的話題,人們對資料的渴望也變成貪婪,資料也就成了“石油”,爬蟲也就成了“鑽井機”。
為了獲取石油,人們使用鑽井機;為了獲取資料,人們使用爬蟲。為了獲得資料,人們把網際網路鑽的是“千瘡百孔”。哈哈,這裡有些誇張。但人們對資料的獲取,已經打破的君子協定,和網站們玩起了貓捉老鼠的遊戲,展開了道高一尺魔高一丈的較量。
為什麼說是較量呢?因為大量爬蟲的行為會給網站帶來網路頻寬、伺服器計算力等方面很大的壓力,卻幾乎不帶來任何利益。為了降低這種毫無利益的壓力和避免自己的資料被他人集中收集,網站肯定要透過技術手段來限制爬蟲;另一方面,爬蟲為了獲取石油般的資料,就想方設法來突破這種限制。
對於這種較量的理解,還是看活生生的例子來得更透徹。
- 你有沒有花幾十塊錢讓某個軟體幫你搶火車票?
- 攻: 搶票爬蟲會不斷訪問12306來獲得火車票座位資料,並進而購買火車票;
- 防: 12306網站出了變態的認證碼,人都經常識別錯誤。
- 各種秒殺讓你很受傷!
- 攻: 研究網站的秒殺機制,提前寫好爬蟲,秒殺時刻,人快不過機器;
- 防: 有些秒殺的宣傳作用很大就懶得防;有些秒殺機制複雜到你很難寫出對應的爬蟲;有些秒殺成功被發現作弊也會被取消。
爬蟲變得越來越多,越來越肆無忌憚,網站也不得不使用各種技術手段來禁止或限制爬蟲。這些手段大致包括:
- 使用賬戶保護資料,資料僅對登入使用者可見;
- 資料多次非同步載入;
- 限制IP訪問頻率,甚至封鎖IP;
- 輸入驗證碼以獲得訪問許可權;
- 資料在伺服器端加密,瀏覽器端解密;
- ……
而這些手段也是爬蟲在技術實現中要解決和突破的問題。
三、網路爬蟲的自我約束
看完上面“貓捉老鼠”的遊戲的描述,小猿們不禁要問,網站和爬蟲這種對抗較量會不會引起法律問題?
這是一個很好的問題,也是值得每個爬蟲開發者思考的問題。
爬蟲作為一種技術本身可能無所謂善惡,但是使用它的人就有善惡之分。如何使用爬蟲,爬取的資料如何使用,都可能產生潛在的法律問題。作為技術開發的小猿們,都應該思考這個問題。無論何種目的,網路爬蟲都不能突破法律的底線,同時也有遵守一定的準則:
- 遵循robots.txt協議;
- 避免短時間高併發訪問目標網站,避免干擾目標網站的正常執行;
- 不要抓取個人資訊,比如手機通訊錄等;
- 使用抓來的資料注意隱私保護,合法合規。
守法合規,既是一直自我約束,也是自我保護。
科普了什麼是網路爬蟲的概念後,下一篇我們講:
網路爬蟲的原理
我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。
***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***