程序員的爬蟲歷程

(此文來自樂字節(jié))

自我介紹

大家好,我是一名程序員。專做爬蟲的程序員,現(xiàn)就職于樂字節(jié)公司;2015年畢業(yè)于某大專院校。爬過淘寶、搞過京東、干過微信,總之你們平時(shí)所用的幾乎每個(gè)平臺(tái)都被我的爬蟲光顧過。

2016年我從某大廠離職跟著當(dāng)時(shí)這個(gè)大廠的副總裁去創(chuàng)業(yè)。本計(jì)劃5年內(nèi)坐擁千萬身價(jià),不料創(chuàng)業(yè)失敗于2019年低離開了呆了3年零6個(gè)月的公司,重新開始了求職打工生涯。

2019年互聯(lián)網(wǎng)裁員風(fēng)波,大家混的都不好。我肯定是一樣的,我找了將近一個(gè)月的工作才找到合適的,我記得剛畢業(yè)時(shí)找工作也才花了2周。

不過皇天不負(fù)有心人,我于2019年12月2日我入職某小公司(100人左右),不是我鄙視這小公司。實(shí)在后面他做的事情太絕了,我沒曝光他就是給他面子。

我的title是高級(jí)golang工程師,負(fù)責(zé)公司某事業(yè)部的推薦系統(tǒng)研發(fā)工作。經(jīng)過3個(gè)月的努力我把推薦系統(tǒng)從0到1干出來。

項(xiàng)目1.0版本一收尾,2月25號(hào)事業(yè)部leader突然把我叫到辦公室,說公司近期有人員調(diào)整讓我離職。我簽的6個(gè)月試用期的合同,才做了3個(gè)月。

我對(duì)leader說我會(huì)盡快交接完成,爭(zhēng)取兩周內(nèi)交接完。他說:‘就這就兩天吧…… MD,當(dāng)時(shí)那個(gè)人事拿著離職申請(qǐng)放在我面前,催著我簽,我就不簽……我說還沒交接完,我能拖一天是一天。跟我交接的兄弟很配合我說太難了,還要兩天。

hr說:“你先離職,等后面出了問題再微信問你,你應(yīng)該也不會(huì)不幫忙對(duì)吧”。

我內(nèi)心:“xxx(敏感詞),你們這樣趕人走你還想我?guī)湍愫罄m(xù)解決問題!”。硬是又拖了一天,我才簽了離職申請(qǐng)。

后來我才知道試用期被辭退可以拿半個(gè)月的補(bǔ)償。當(dāng)時(shí)就不應(yīng)該簽人事給的那個(gè)自愿離職申請(qǐng)表,我以為試用期被辭退沒有補(bǔ)償是正常的。也怪我之前沒好好普法,所以希望各位記得提防小公司卸磨殺驢的操作,試用期被辭一定至少要半個(gè)月補(bǔ)償不然就上仲裁,小公司一般吃軟怕硬,只要你開口他就會(huì)給。

在這里我要感謝跟我交接的兄弟。是他硬生生幫我把交接流程拖延了近一周,為我找下個(gè)工作帶來緩沖的時(shí)間。不過他在我離職后一天就向領(lǐng)導(dǎo)提了離職,因?yàn)樗膊幌朐谶@傻 X 公司干了哈哈…… 不過他現(xiàn)在因?yàn)椴∏?,已?jīng)半年沒有上班,只能在家靜養(yǎng)。好人怎么沒有好報(bào)?

經(jīng)過疫情許多公司這一輪裁員,我發(fā)現(xiàn)我并不適合搞純后臺(tái)開發(fā)。因?yàn)槲夜ぷ饕呀?jīng)5年了,所接觸的知識(shí)全部是圍繞爬蟲、逆向方面的技術(shù)棧。

爬蟲是一直對(duì)抗型的工作,反爬的技術(shù)不斷升級(jí),爬蟲也要升級(jí)。人家搞加密,你就得搞解密,人家搞加殼,你就要脫殼。爬蟲很輕易轉(zhuǎn)到后端去碼磚。后端卻不能輕易轉(zhuǎn)到爬蟲來。

總之,一個(gè)頂級(jí)的爬蟲工程師公司被裁的概率很小。我想好了,我還是繼續(xù)干爬蟲,畢竟咱學(xué)歷不行,一定要搞點(diǎn)掐脖子的技術(shù)公司才能重視你,否則你還會(huì)被裁。

失業(yè)的日子不好過

我離職這家小公司是3月3日。后面我就每天開始投簡(jiǎn)歷,疫情期間工作相當(dāng)難找。Boss、拉鉤海投之后的回電都寥寥無幾,要么是幾個(gè)外包公司的電話。

疫情期間除了BATJ這種巨頭公司還能維持給員工正常發(fā)工資,不裁員。其他公司都是裁員、降薪、停薪,還有那種給不起補(bǔ)償又想削減人員的公司說要搬到懷柔去辦公,上下班交通讓員工自己想辦法,然后員工就自己離職了。

沒有工作的日子我比較窘迫,因?yàn)楸池?fù)了兩套房的房貸,月供不能停。平時(shí)沒有存糧意識(shí),所以一下被動(dòng)離職整的我還真挺被動(dòng)的。

那段時(shí)間我銀行賬戶上就剩下2萬多塊錢了,每個(gè)月房貸+租房+生活費(fèi)至少1.8W的剛性輸出。也就說我下一份工作就算降薪稅后收入至少也得1.8W。

壓力巨大,能節(jié)省開支就盡量節(jié)省。以前喝礦泉水,現(xiàn)在去小區(qū)自助取水機(jī)上打水喝。以前出門打車,現(xiàn)在坐地鐵公交。

為了節(jié)約開支,我每天早上和中午就吃一個(gè)蘋果,晚上再去買菜自己做飯。這樣每天就能節(jié)省大概50-70的餐費(fèi)。

期間面試也很窘迫,大多小公司給不起錢,我還不愿降太多薪。不過我發(fā)現(xiàn)很多公司做不了APP逆向/抓取,因?yàn)檫@塊技術(shù)上不了臺(tái)面,而且還晦澀難懂。我再反思,我是否要直接破解一兩個(gè)大廠的app,錄成視頻教程上傳到網(wǎng)盤,然后把觀看地址放簡(jiǎn)歷里面。這樣我的簡(jiǎn)歷會(huì)非常有特色,HR就大概率會(huì)把簡(jiǎn)歷投遞給面試官。

只要面試官我見到了,我就可以用技術(shù)鎮(zhèn)住他。牛逼的大專和985、211一等學(xué)府的人綜合能力都差不多。唯一的區(qū)別人家有更多的面試機(jī)會(huì),而你如果不是特別優(yōu)秀,不能在有限的機(jī)會(huì)里抓住的話,你就很難了。

所以能進(jìn)大廠的大專有時(shí)候他的閃光點(diǎn)是很一般是很強(qiáng)的。否則同等能力公司更愿意要學(xué)歷高的,能要你說明你有不可替代性。

上海成功入職,學(xué)歷卻被老總鄙視

我發(fā)現(xiàn)疫情期間北京管控非常嚴(yán)格,導(dǎo)致北京的公司不能正常運(yùn)轉(zhuǎn)。所以我往上海、杭州那邊開始投簡(jiǎn)歷…

不知道是老天爺?shù)木祛欉€是自己的努力終于上海一家公司給我打電話了,經(jīng)過1、2面,面試官每個(gè)問題都被我唬住了。但是他們還是不放心,主要是我覺得我要價(jià)太高。

對(duì)方技術(shù)總監(jiān)給我出了一個(gè)作業(yè),要我逆向 xx APP。我從早上9點(diǎn)干到晚上11點(diǎn)終于逆向出來,中間除了上個(gè)廁所、吃個(gè)飯啥的我基本沒有離開過電腦。我把逆向結(jié)果發(fā)給面試官。

4月9號(hào)周四 HR 給我電話,問我什么時(shí)候可以入職?我說下周一(4月13號(hào))。

即使這家公司遠(yuǎn)在1300多公里外的上海,我也是覺得我等不起了。我已經(jīng)近1個(gè)半月沒有收入了,加之之前杠桿玩的太高貸款買了兩套房。

我已經(jīng)算好了每個(gè)月存多少花多少,所以導(dǎo)致幾乎沒有什么存糧。我得趕緊入職,簡(jiǎn)單收拾一下帶幾件短期換洗得衣服買上飛往上海得機(jī)票周六就出發(fā)了。入職很順利…

我入職大概第二周吧,這家公司老板在一個(gè)高層會(huì)議上。直接懟這位招聘我進(jìn)去的技術(shù)總監(jiān):

“你招的這是什么人?以后我們只要985、211的,我們不要這種學(xué)校。這是什么學(xué)校?”。

后來技術(shù)總監(jiān)就把這事跟我說了,我心里那個(gè)怒。我雖然學(xué)歷低,好歹我技術(shù)也還OK。爬蟲,985、211能干的,我能干。不能干的,我也能干。

靠技術(shù)站穩(wěn)腳

我現(xiàn)在只是還沒產(chǎn)出,等我?guī)湍愀銕讉€(gè) app 你就知道我的厲害了… 其實(shí),一個(gè)人真正的力量來自于憤怒,那種沉淀在內(nèi)心深處,把能量全部釋放在某件事情上的憤怒。

這家公司業(yè)務(wù)模式很受爬蟲技術(shù)的限制,客戶買不買帳全看你數(shù)據(jù)分析出來。而數(shù)據(jù)分析又基于你能不能有擼數(shù)據(jù)的能力。就是那種需要監(jiān)控全網(wǎng)視頻、文章數(shù)據(jù)的場(chǎng)景,前幾年這家公司做的順風(fēng)順?biāo)?/p>

近幾年不行了,業(yè)務(wù)越來越難做。主要是因?yàn)槎桃曨l產(chǎn)業(yè)為代表的新興數(shù)據(jù)全部集中到了APP上面,抓APP和以前做網(wǎng)站web爬蟲的技術(shù)完全不一樣。

我第一個(gè)任務(wù)就是抓取 xx視頻號(hào),賊尼瑪 xx。由于搞APP工作得高度集中精力,不然逆向思路中斷的話非常不好。看 xx 混淆源碼結(jié)合frida動(dòng)態(tài)hook調(diào)試分析邏輯,每天晚上9點(diǎn)下班回家洗完澡就癱倒在床上。

經(jīng)過1個(gè)月的奮戰(zhàn),我終于把 xx 視頻號(hào)搞定了。商務(wù)立馬拿研發(fā)成果去跟甲方公司吹牛逼,看我們可以擼某 APP 數(shù)據(jù),其他投標(biāo)公司不能做。然后公司順利拿到某大公司的合作合同。這一簽就是3000萬!?。『竺嬗指懔藥讉€(gè)APP,反正都是大家手機(jī)上天天用的那幾個(gè)APP吧。

對(duì)“42k,100萬股票” 說 “No”

我站穩(wěn)腳跟了,下一步我要“教”這個(gè)老板做人。只要985、211是吧?OK!我騎驢找馬,繼續(xù)投簡(jiǎn)歷,找下家。面了N多公司吧,當(dāng)然有很多公司都沒過。原因大家自己想吧,前面我也給大家普及了爬蟲技術(shù)棧的誤區(qū),也有我其他方面的原因吧。

我確定下家提離職幾天之后,老板跟總監(jiān)開會(huì)指定下一步的數(shù)據(jù)采集策略??偙O(jiān)跟老板說我提離職了,還補(bǔ)了一句‘你招到他算是招到寶了’。老板叫我去他辦公室,問了下為什么離職?

我當(dāng)然不能說因?yàn)槟隳蔷洹覀冎灰?85、211’的話,我就告訴他去意已決…省略很多…老板:”我給你漲到42k+100W股票(分四年拿清),我想你做我的技術(shù)合伙人。目前公司市值x個(gè)億,三年內(nèi)公司會(huì)在創(chuàng)業(yè)板上市…我開這家公司9年了,從來沒遇到像你這么能做爬蟲的,你要是能留下來,以后你直接匯報(bào)給我(連升兩級(jí)),8個(gè)人的爬蟲團(tuán)隊(duì)給你帶”。

我內(nèi)心:“你不是要985、211的嗎?”。我拒絕了,做我的老板可以沒能力、沒背景、甚至“沒錢”。但是你要是只看學(xué)歷,就不行。

這是我的底線。

我這么給大家打個(gè)比方吧,你們搞前后端、客戶端、Java、Python、C++的都是正向工程,你們每天都是在熟練駕駛著各種框架,有時(shí)候把框架做些小小改動(dòng)就認(rèn)為自己牛逼了。感覺沒啥事就去研究算法,看看怎么碼磚更優(yōu)美。

爬蟲/逆向的人,工作性質(zhì)決定了我們不太需要關(guān)注什么 JVM 內(nèi)存模型、GC調(diào)優(yōu)、各種排序算法、數(shù)據(jù)結(jié)構(gòu)什么b+樹、紅黑樹…,我們也沒有時(shí)間去了解。

這些需求每個(gè)編程語言的標(biāo)準(zhǔn)庫(kù)已經(jīng)完全夠用了。

爬蟲工程師不像你們正向開發(fā)工程師需要去了解開發(fā)語言和框架的“發(fā)動(dòng)機(jī)引擎”。所以我有時(shí)候遇到面試官很偏向問什么算法的、開發(fā)框架底層原理我內(nèi)心那個(gè)火。

你爬蟲技術(shù)垃圾可以,但是對(duì)爬蟲技術(shù)也沒有一個(gè)正確的認(rèn)知,那必定你招的人也很垃圾啊。因?yàn)槟阌米龊笈_(tái)的考核方式去招聘做爬蟲的人,那你招的到也都是工程能力OK,但是對(duì)爬蟲略知一二這樣的人。

其實(shí),爬蟲/逆向工程師最重要的是去了解各個(gè)操作系統(tǒng)的設(shè)計(jì)規(guī)則和一些應(yīng)用加載機(jī)制。比如你做web爬蟲的,你得懂瀏覽器內(nèi)核渲染機(jī)制吧,js反機(jī)器識(shí)別原理?怎么去機(jī)器指紋?怎么定位加密函數(shù)?AST語法樹解混淆代碼?動(dòng)態(tài)字體怎么破?滑塊怎么破?

非爬蟲工程師所了解的搞IP池那都是基本功,能光靠搭建代理池就能解決問題,還要我們這些專業(yè)的爬蟲工程師干什么?

你搞Android逆向,你得懂一些安卓應(yīng)用開發(fā)的知識(shí)吧。安卓四大組件是什么?別上來就用jadx看app源代碼,那你只會(huì)一臉懵逼。安卓反調(diào)試機(jī)制怎么實(shí)現(xiàn)的?怎么找簽名方法?

某年輕人:“直接源代碼搜索關(guān)鍵詞不就行了嗎”。源代碼混淆了怎么辦?加殼了怎么辦?就算你把java層簽名函數(shù)搞定了,后面你會(huì)發(fā)現(xiàn)你的知識(shí)還是不夠用。

別人后面把簽名函數(shù)放在so里面,你得懂匯編吧。代碼寄存器、段地址寄存器、偏移地址寄存器、跳轉(zhuǎn)指令、返回指令、ollvm等等。這些知識(shí),那才叫真正的晦澀難懂。

等你學(xué)會(huì)了95%以上逆向分析的技術(shù),別人突然不玩http(s)了。人家搞一套自己的協(xié)議,mmtls聽過沒有?你們現(xiàn)在每天用的微信就是走的這個(gè)協(xié)議。你還想抓包?想得美!

年輕人說:“那用tcpdump、Wireshark抓包不就行了嗎?”。能說這話的都是外行,現(xiàn)在哪里還是20年前的互聯(lián)網(wǎng)。什么協(xié)議沒有加密?你用這些抓的原始tcp數(shù)據(jù)包能看到的都是加密1010。

所以,APP逆向/爬蟲技術(shù)發(fā)展到后面就有了諸如沙盒(其實(shí)就是安卓上的虛擬機(jī))、注入調(diào)用、hook等一些比較淫亂的技術(shù)。從某種概念上去理解這些技術(shù)的發(fā)展,就是為了用工程化的能力盡量替代更加底層低效的純逆向工程。

于是就有了半脫機(jī)協(xié)議,就是難以破解還原的加密方法我通過注入調(diào)用的方式去調(diào)(黑盒調(diào)用),拿到加密結(jié)果后面接著走接口。但是慢慢人家調(diào)用鏈路檢測(cè)上來了,你直接調(diào)用也不好使了。

我有一次做 xxx App 的逆向發(fā)現(xiàn), xxx App 就會(huì)對(duì)調(diào)用鏈路進(jìn)行檢測(cè)??傊老x本質(zhì)是一種作弊的行為,而作弊又有高級(jí)和低級(jí)之分。低級(jí)的爬蟲,就是玩自動(dòng)化的,搞個(gè)類似按鍵精靈的東西去點(diǎn)點(diǎn)點(diǎn)。手機(jī)上再配一個(gè)mitmproxy截取流量,更低級(jí)的直接從屏幕上的元素讀取信息。抓取量大了,這種技術(shù)就費(fèi)勁了。

PS:推薦觀看:Java八個(gè)實(shí)戰(zhàn)項(xiàng)目合集自學(xué)課程B站:BV1Ch411v7fP

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容