若是你不知道作什麼,那就學一門雜學吧

若是你不知道作什麼,那就學一門雜學吧

序言

這篇文章沒有代碼,請放心閱讀。html

多年之後,面對人工智能研究員那混亂不堪的代碼,我會想起第一次和S君相見的那個遙遠的下午。那時的B公司,仍是一個僅有6我的的小團隊,Mac和顯示器在桌上依次排開,你們坐在一塊兒,不須要稱呼姓名,轉過臉去,對方就知道你在和他說話。一切看起來都那麼美好,咱們全部人,都但願本身和這個公司可以一塊兒成長。前端

彼時S君剛從加拿大回來,老闆把他介紹給咱們,因而S君做爲數據產品經理跟我有了項目上的接觸。正則表達式

創業公司裏面,每個人都須要會不少的技藝,因而S君開始自學Python。數據庫

有一天,S君問我:「你玩MineCraft嗎?「編程

「玩,但我更喜歡在B站上看別人的世界。」我答道。小程序

「我以爲我如今寫程序,像是在玩個人世界。」S君笑着說道。微信小程序

「是否是以爲你已經掌握了Python的基本語法,看着別人把Python用的溜溜轉,而你本身殊不知道用它來作什麼?」安全

「是這樣的,你懂我。」微信

「那你學一門雜學吧。」框架

因而S君被我誘拐過來跟我一塊兒寫爬蟲。

後來,S君離開了B公司。

三個月後,我也離開了。

今後,咱們再也沒有見過。

寫爬蟲與三峽大壩

有一天,S君興沖沖地跑來跟我說:「我體會到三峽大壩的偉大功能了!」

「你是爬蟲工程師仍是水利工程師?」

「你知道嗎,無論上游的水勢多麼兇猛,從大壩出來之後老是安全而穩定。」S君並無回答個人問題,而是自顧自地說道。

「原來你開始用Kafka。不錯,孺子可教。」

S君吐了一下舌頭:「仍是師傅教導有方。」

前不久,S君的爬蟲剛剛達到了日產數據千萬條的目標。然而他只高興了一天。由於他發現,數據寫到數據庫之後,讀起來很麻煩。

S君有多個數據分析的系統須要從數據庫裏面讀取爬蟲爬好的數據,可是從天天千萬量級的數據中尋找特定的數據是一個很慢的過程。若是程序遇到異常致使崩潰,又得從頭開始讀。

S君問我:「如今我每個數據分析的腳本都要從數據庫裏面讀一次數據,作了太多重複的工做,單機單節點的數據庫快要撐不住了。我是否是要去學習分庫分表搭建集羣啊?」

我告訴S君:「這個後面你天然是須要去作的。但如今,你能夠先試一試Kafka,我已經搭建好了一個Kafka的集羣了,你這樣使用……」。

後來,S君讓全部爬蟲把爬到的數據到直接送進了Kafka,而後再從Kafka裏面讀數據出來,一個Group用來備份原始數據,一份Group用來生成中間表,一份Group用來監控報警,一份Group用來繪製DashBoard。不管爬蟲塞給Kafka的數據有多少,有多快,從Kafka讀數據的地方都能按照本身的節奏來消費和使用。

編程最重要的能力是變通

S君是一個老實孩子。

在開發一個爬蟲的過程當中,網站接口返回給他的數據看起來是JSON格式,因而他就用Python自帶的JSON庫去解析。結果解析失敗了。由於這些所謂的看起來像JSON的東西,居然沒有雙引號。

難道是JSON的超集?S君一通搜索,發現用YMAL庫也許能夠解析這種數據。因而安裝YMAL庫,一解析又報錯。

難道這些數據直接就是Python的字典?因而S君用上了邪惡的eval。又報錯,由於裏面有null和小寫的true。

「你爲何不試一試直接用正則表達式呢?」我對S君說。

「靠!」S君一拍桌子,旁邊的老闆嚇得把搪瓷杯子裏面的快樂水灑在了白襯衣上。

而後S君用正則表達式花了10秒鐘結束了戰鬥。

既然收集了數據就要讓它發光發熱

S君在加拿大留學時學的專業是金融數學和統計。因此他對數據分析也頗有興趣。在他爬蟲收集的數據夠用之後,我跟他講了如何使用Pandas來分析數據。

S君把他分析的酒店價格變化數據給分享給了咱們。不愧是金融+數學+統計學背景的高級知識分子 + 超級強大的Pandas + 超級好用的Jupyter。這份數據不只完美再現了過去一年的價格走勢,還預測了將來的任何變化,多達四十六張圖表彷佛窮盡了全部的組合。

你小學上課傳過紙條嗎

「我如今能體會那些半路攔截紙條的人是什麼心態了。」這是S君第一次使用Charles時對我說的話。

今後之後,我不多看到S君分析網頁了。由於他學會了在爬蟲開發的過程當中,首先經過中間人***技術分析微信小程序和手機App。這種方式每每可以直接得到數據,拿到數據之後就能直接儲存,不再用寫煩人的XPath或者長的跟表情符號同樣的正則表達式了。

有一天,我在玩一個網頁版的***解密遊戲,在網頁上尋找某個地方隱藏起來的密碼,而後輸入每一關的回答框中,答對才能進入下一關。

遊戲有12關,而我卡在了第6關。只見S君拿着電腦走到我面前,指着第12關的通關頁面跟我炫耀。

「你是否是用MITMProxy替換了這個網站的Js文件?」

「果真仍是瞞不過師傅你啊。」

「你攔截了別人的紙條,作了修改,而後又疊好繼續傳下去,你有考慮過發紙條的人和收紙條的人的感覺嗎?」

「我小學時候不傳紙條,都是妹子直接約個人。」

加密?不存在的

「前端沒有祕密」。S君在成功逆向了一個網站的Js文件之後如是對我說。

「那是由於這個網站的Js代碼就赤裸裸地放在你面前,徹底沒有混淆。」我對S君說道。

「不怕,我能夠用Node.js來運行混淆過的代碼。我已經搭建好Node.js服務了,只要把Js代碼傳進去,他就會把結果給我返回回來。」S君對此彷佛一臉自行。

「你何時學會的Node.js?」

「這不是師傅你說過技多不壓身嗎?既然作爬蟲須要動JavaScript,那我順手就把Node.js給學了。」S君絕不畏懼的表情,彷佛證實他已經猜透了我要問什麼。

「那若是目標沒有網站,只有App呢?」

「不怕,Android 逆向工程我也順便研究了一點。Java我也看得懂。」

「看來這些已經不須要我再教你了。」

你確定薅了直播答題的羊毛吧

去年年末的直播答題着實火了一把。那個時候,我和S君分開已經有一段時間了。我相信,在全民答題的每個夜晚,S君的電腦上必定連着很多於六臺安卓手機。這些手機運行着不一樣的答題平臺,可以自動讀取屏幕上的問題並自動選擇答案。

我把安卓自動化測試技術教給S君,原本是讓他結合爬蟲,實現羣控從而抓取一些難以處理的數據,但我相信他確定會用來答題。

變通,這一點他學的愈來愈好了。

只但願他不要成爲羊毛黨。

後記

後來,我再也沒有見過S君這樣有趣的人。因此我把我和S君的故事寫成了一本書:《Python爬蟲開發 從入門到實戰》,如今已在京東,噹噹與亞馬遜上架。

京東:https://item.jd.com/33577263621.html
噹噹:http://product.m.dangdang.com/25349717.html
亞馬遜:https://www.amazon.cn/dp/B07HGBRXFW

爬蟲是一門雜學。由於在一個完整的開發過程當中,須要涉及到的知識能夠包括但不限於:Python,HTML,JavaScript,正則表達式,XPath,數據庫,Redis,消息隊列,Docker,ELK,Hadoop,數據分析,ETL,中間人***,自動化測試技術,可視化……

這其中的任何一項,在一個大公司裏面均可以讓不少人來作。

就像這篇文章裏面反覆出現的一個詞:變通。

只要可以得到數據,任何技術均可以使用。所謂草木竹石皆可爲劍。

爬蟲開發,絕對不只僅是Scrapy,PySpider,requests這些框架或者庫的使用。因此在這本書裏面,我也刻意減小了框架使用說明的部分,而把重點放在了各類突破反爬蟲機制或者使用變通的方法繞過反爬蟲機制的方法論和實踐中。

經過學習爬蟲,你最後不必定選擇爬蟲工程師這個崗位,可是在學習爬蟲的過程當中,你將會接觸到的各類工具,方法,服務組件,都會在你之後的生活和工做中幫到你,讓你知道,在遇到一個問題的時候,解決方法在哪一個地方。

相關文章
相關標籤/搜索