都是爬蟲惹的禍
1、什麼是爬蟲?
不知道有多少人看過吳軍博士的《數學之美》(第二版),如果沒有看過,真心推薦你去看看。書中有很大一部分內容在講搜尋引擎和自然語言處理,那這和爬蟲有什麼關係呢?
其實還是有關係的,做個不恰當的比喻,其實搜尋引擎也是一個大型的爬蟲,只不過搜尋引擎爬的是全網的“公開資訊”,然後將網頁的內容快取並建立索引,以便使用者進行搜尋。
當然,這和大家理解的爬蟲可能不一樣。在大部分人看來,爬蟲就是寫一段程式來定向抓取某一類資料。我想說的也是這一類爬蟲。
舉一個例子,比如范冰冰的一條微博,大概有13.2w條評論,我們去翻看這些評論的時候,這13.2w條評論並不是一次性加載出來的,而是我們瀏覽的時候手指在手機螢幕向上滑,觸發微部落格戶端向伺服器發出請求,從而載入後續評論內容,正常情況下一次請求載入10條評論。

每次請求都有一個page欄位或其他欄位來唯一標識當前請求的這一頁資料,如果使用者通過手指滑動想要看完所有的評論,那會花費大量的時間。
而這時就可以用爬蟲來幫忙抓取所有資料了,爬蟲可以“模擬”使用者發出大量的請求,從而快速獲得全部資料。
大家常常談起的爬蟲,其實就是指定向抓取——通過模擬使用者操作,傳送請求,獲取資料。
2、 公開資訊和後臺資訊
通常爬蟲抓取的是公開資訊,那什麼叫公開資訊,什麼又叫後臺資訊呢?
公開資訊有兩層含義,一是面向大眾的公開資訊,一是面向個人的公開資訊。
面向大眾的公開資訊是指那些你不需要登入就能瀏覽的資訊,比如知乎、京東的產品、微博的部分頁面、攜程網的酒店頁面等。
面向個人的公開資訊是指你作為某些App的使用者,需要登入自己的賬號才能看到的資訊,比如一些相親網,需要你登入後才能檢視別人的公開資訊。
後臺資訊又是指什麼呢?
後臺資訊指的是,App服務提供商才能看到的資訊。拿知乎和微博為例,某些後臺資訊如使用者的身份資訊、姓名、身份證號、app的使用者總量、日活躍數、某個頁面的UV(瀏覽量)、PV(點選量)等。這類資訊通常是程式的開發者或資料維護者才有權看到。
爬蟲抓取的通常是公開資訊,即使用者有權看到的資訊。如果在未經服務提供商允許的情況下獲取了別人的後臺資訊,就是違法犯罪,這叫“脫褲”。
3、 過度邪惡化
站在技術角度講,爬蟲很多時候是被大眾誤解了。很多人不由自主地就把爬蟲和後臺資訊聯絡到了一起,更何況,現在還是一個資訊保安得不到保障的時代。
所以,也可以理解,很多人覺得爬蟲不是什麼好東西,因為誤解從一開始就產生了。

就像前些天鬧得沸沸揚揚的程式設計師捅了“馬蜂窩”事件。馬蜂窩是一個類似於攜程和去哪兒的旅遊App。
幾個程式設計師用爬蟲抓取了它的一些UGC相關資訊(大多是使用者評論),然而發現它的部分評論是“山寨”的,或是從別處爬來的,或是自己生成的。
看網上的輿論呢,是程式設計師一邊倒地支援扒出馬蜂窩造假的那幾個程式設計師,而其他民眾基本是吃瓜,說啥的都有。
據說,馬蜂窩還要告這幾個程式設計師。不過告啥呢?如果是告他們抓取資料,可是自己的資料也是從別處抓過來的呀。如果是告誹謗,資料擺在那裡,又是實錘。看來,這肚子氣只能憋回去了。
其實要說資料造假,恐怕少有App敢站出來說自己沒造過假,行業內都是你爬我的資料,我爬你的資料,大家也都心知肚明。
這次馬蜂窩是吃了虧了,不過也怨自己,因為它宣揚的就是自己的使用者量和資料真實性,這次被打臉了也沒法還手。
4、網際網路資訊管制
並不是抓取公開資訊就是合理合法和不受管制的,只是現在還沒有明文規定去管這一塊。如果真的哪天程式設計師寫爬蟲觸及到了別人的利益,還是很有可能惹禍上身的。
之前也有過案例,“車來了”的五名程式設計師爬取實時公交資料,進行不正當競爭,被關進了監獄。
技術無罪,就看你如何使用,即使是公開資訊也不見得能爬取。在文章開頭,我們提到過搜尋引擎也是一個大型的爬蟲,如果一些網站不想被搜尋引擎收錄或者抓取,它就可以通過某種協議來告知搜尋引擎,你不要來抓取我了。
就如下圖,通過百度搜尋淘寶會發現淘寶網相關的網站底下寫了這麼句話:“由於該網站的robots.txt檔案存在限制指令...”,這句話的意思就是,百度無權抓取淘寶網內部的資料,所以你很少在百度上直接搜尋到淘寶上的商品。

網際網路上充斥著各種各樣的協議,也正是因為有這些協議的存在,網際網路才能這樣有條不紊地執行。
robot.txt 檔案你也可以理解為協議的一種形式,只要對方網站的robot.txt檔案中標明瞭自己不願被抓取,那麼強行抓取,可能就會造成侵權。
5、 學爬蟲還有沒有意義?
把爬蟲說的那麼可怕,是不是嚇得你都不敢學了?學還是要學的,因為爬蟲在以後還是很有用武之地的。
對公司來說,在資料時代,只要有市場,爬蟲就一定有用。雖然明面上大家都說自己的資料多麼多麼真實,可實際誰知道呢?
還有一點就是,即使你不爬別人的資料,也阻止不了別人爬你的資料,所以每個以資料為生的公司都會安排一波人去做反爬蟲,用各種策略應對競爭者或其他公司的抓取行為。
反爬蟲一般都被做成中介軟體,以服務的形式給其他應用接入,所以反爬蟲肯定是比爬蟲要難很多。畢竟各種前端的加密都是暴露在外的,原則上沒有爬不了的資料。
對個人來說,爬蟲的用處也很大,不管你是經營一個實體店,還是一家淘寶店,你都需要獲取並統計資料,資料分析思維是很有必要的。
一個很簡單的例子,市面上很多淘寶開店祕籍講的其實就是資料分析的事兒,只是換了個說法,不顯得那麼技術化而已。淘
寶直通車多數時候就是做A/B test,檢索優化其實就是做SEO,刷排名其實就是在統計熱點詞彙等等,如果你懂了技術,這些事情都可以用技術解決。
如果一個人既有商業頭腦又有技術,那麼他應該會比別人獲得更多的收益。當然,很多人只具有這兩項技能中的一項,或者一項都沒有。
總之今後,爬蟲、資料分析、乃至機器學習,做商業的你都應該有所瞭解。
其實,對程式設計師而言,還有一點收益就是,你在學習爬蟲的過程中可以鍛鍊技術,雖然這個收益“看起來”價效比非常低,因為你沒有能讓一項技術來“work for yourself”。
最後,再談一點我個人對爬蟲的看法。如果你將來想從事爬蟲相關的工作,除了瞭解爬蟲外,你更應該多瞭解反爬蟲、架構以及機器學習的相關知識。因為如果僅僅是爬蟲的話,並不是很難,很多人都能學會。
在規模稍大一些的企業中,爬資料肯定不是隻寫個Python指令碼,一般都有自己的爬蟲架構,並以線上服務的形式存在,供他人呼叫。所以,除了學習爬蟲,你還要學習架構和服務開發。
和獲取資料相比,企業會更在意自己的資料是否安全、是否能被別人抓取,所以在反爬方面,投入的人力也比較多。
反爬是一件比較難的事情,具有一定的滯後性,因為當你識別出一個IP有問題的時候,或許別人已經爬完了資料換了IP,它難就難在這裡。未來或許可以加入一些機器學習的手段,做一些分類器,在爬蟲剛開始抓取的時候就識別出它的異常行為並及時封禁,這才有可能做到真正意義上的反爬。
本文作者: 二胖並不胖