天天看點

都是爬蟲惹的禍

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,它難就難在這裡。未來或許可以加入一些機器學習的手段,做一些分類器,在爬蟲剛開始抓取的時候就識别出它的異常行為并及時封禁,這才有可能做到真正意義上的反爬。

本文作者: 二胖并不胖

本文來自雲栖社群合作夥伴“

大資料前沿

”,了解相關資訊可以關注“

繼續閱讀