程序员的爬虫历程

(此文来自乐字节)

自我介绍

大家好,我是一名程序员。专做爬虫的程序员,现就职于乐字节公司;2015年毕业于某大专院校。爬过淘宝、搞过京东、干过微信,总之你们平时所用的几乎每个平台都被我的爬虫光顾过。

2016年我从某大厂离职跟着当时这个大厂的副总裁去创业。本计划5年内坐拥千万身价,不料创业失败于2019年低离开了呆了3年零6个月的公司,重新开始了求职打工生涯。

2019年互联网裁员风波,大家混的都不好。我肯定是一样的,我找了将近一个月的工作才找到合适的,我记得刚毕业时找工作也才花了2周。

不过皇天不负有心人,我于2019年12月2日我入职某小公司(100人左右),不是我鄙视这小公司。实在后面他做的事情太绝了,我没曝光他就是给他面子。

我的title是高级golang工程师,负责公司某事业部的推荐系统研发工作。经过3个月的努力我把推荐系统从0到1干出来。

项目1.0版本一收尾,2月25号事业部leader突然把我叫到办公室,说公司近期有人员调整让我离职。我签的6个月试用期的合同,才做了3个月。

我对leader说我会尽快交接完成,争取两周内交接完。他说:‘就这就两天吧…… MD,当时那个人事拿着离职申请放在我面前,催着我签,我就不签……我说还没交接完,我能拖一天是一天。跟我交接的兄弟很配合我说太难了,还要两天。

hr说:“你先离职,等后面出了问题再微信问你,你应该也不会不帮忙对吧”。

我内心:“xxx(敏感词),你们这样赶人走你还想我帮你后续解决问题!”。硬是又拖了一天,我才签了离职申请。

后来我才知道试用期被辞退可以拿半个月的补偿。当时就不应该签人事给的那个自愿离职申请表,我以为试用期被辞退没有补偿是正常的。也怪我之前没好好普法,所以希望各位记得提防小公司卸磨杀驴的操作,试用期被辞一定至少要半个月补偿不然就上仲裁,小公司一般吃软怕硬,只要你开口他就会给。

在这里我要感谢跟我交接的兄弟。是他硬生生帮我把交接流程拖延了近一周,为我找下个工作带来缓冲的时间。不过他在我离职后一天就向领导提了离职,因为他也不想在这傻 X 公司干了哈哈…… 不过他现在因为病情,已经半年没有上班,只能在家静养。好人怎么没有好报?

经过疫情许多公司这一轮裁员,我发现我并不适合搞纯后台开发。因为我工作已经5年了,所接触的知识全部是围绕爬虫、逆向方面的技术栈。

爬虫是一直对抗型的工作,反爬的技术不断升级,爬虫也要升级。人家搞加密,你就得搞解密,人家搞加壳,你就要脱壳。爬虫很轻易转到后端去码砖。后端却不能轻易转到爬虫来。

总之,一个顶级的爬虫工程师公司被裁的概率很小。我想好了,我还是继续干爬虫,毕竟咱学历不行,一定要搞点掐脖子的技术公司才能重视你,否则你还会被裁。

失业的日子不好过

我离职这家小公司是3月3日。后面我就每天开始投简历,疫情期间工作相当难找。Boss、拉钩海投之后的回电都寥寥无几,要么是几个外包公司的电话。

疫情期间除了BATJ这种巨头公司还能维持给员工正常发工资,不裁员。其他公司都是裁员、降薪、停薪,还有那种给不起补偿又想削减人员的公司说要搬到怀柔去办公,上下班交通让员工自己想办法,然后员工就自己离职了。

没有工作的日子我比较窘迫,因为背负了两套房的房贷,月供不能停。平时没有存粮意识,所以一下被动离职整的我还真挺被动的。

那段时间我银行账户上就剩下2万多块钱了,每个月房贷+租房+生活费至少1.8W的刚性输出。也就说我下一份工作就算降薪税后收入至少也得1.8W。

压力巨大,能节省开支就尽量节省。以前喝矿泉水,现在去小区自助取水机上打水喝。以前出门打车,现在坐地铁公交。

为了节约开支,我每天早上和中午就吃一个苹果,晚上再去买菜自己做饭。这样每天就能节省大概50-70的餐费。

期间面试也很窘迫,大多小公司给不起钱,我还不愿降太多薪。不过我发现很多公司做不了APP逆向/抓取,因为这块技术上不了台面,而且还晦涩难懂。我再反思,我是否要直接破解一两个大厂的app,录成视频教程上传到网盘,然后把观看地址放简历里面。这样我的简历会非常有特色,HR就大概率会把简历投递给面试官。

只要面试官我见到了,我就可以用技术镇住他。牛逼的大专和985、211一等学府的人综合能力都差不多。唯一的区别人家有更多的面试机会,而你如果不是特别优秀,不能在有限的机会里抓住的话,你就很难了。

所以能进大厂的大专有时候他的闪光点是很一般是很强的。否则同等能力公司更愿意要学历高的,能要你说明你有不可替代性。

上海成功入职,学历却被老总鄙视

我发现疫情期间北京管控非常严格,导致北京的公司不能正常运转。所以我往上海、杭州那边开始投简历…

不知道是老天爷的眷顾还是自己的努力终于上海一家公司给我打电话了,经过1、2面,面试官每个问题都被我唬住了。但是他们还是不放心,主要是我觉得我要价太高。

对方技术总监给我出了一个作业,要我逆向 xx APP。我从早上9点干到晚上11点终于逆向出来,中间除了上个厕所、吃个饭啥的我基本没有离开过电脑。我把逆向结果发给面试官。

4月9号周四 HR 给我电话,问我什么时候可以入职?我说下周一(4月13号)。

即使这家公司远在1300多公里外的上海,我也是觉得我等不起了。我已经近1个半月没有收入了,加之之前杠杆玩的太高贷款买了两套房。

我已经算好了每个月存多少花多少,所以导致几乎没有什么存粮。我得赶紧入职,简单收拾一下带几件短期换洗得衣服买上飞往上海得机票周六就出发了。入职很顺利…

我入职大概第二周吧,这家公司老板在一个高层会议上。直接怼这位招聘我进去的技术总监:

“你招的这是什么人?以后我们只要985、211的,我们不要这种学校。这是什么学校?”。

后来技术总监就把这事跟我说了,我心里那个怒。我虽然学历低,好歹我技术也还OK。爬虫,985、211能干的,我能干。不能干的,我也能干。

靠技术站稳脚

我现在只是还没产出,等我帮你搞几个 app 你就知道我的厉害了… 其实,一个人真正的力量来自于愤怒,那种沉淀在内心深处,把能量全部释放在某件事情上的愤怒。

这家公司业务模式很受爬虫技术的限制,客户买不买帐全看你数据分析出来。而数据分析又基于你能不能有撸数据的能力。就是那种需要监控全网视频、文章数据的场景,前几年这家公司做的顺风顺水。

近几年不行了,业务越来越难做。主要是因为短视频产业为代表的新兴数据全部集中到了APP上面,抓APP和以前做网站web爬虫的技术完全不一样。

我第一个任务就是抓取 xx视频号,贼尼玛 xx。由于搞APP工作得高度集中精力,不然逆向思路中断的话非常不好。看 xx 混淆源码结合frida动态hook调试分析逻辑,每天晚上9点下班回家洗完澡就瘫倒在床上。

经过1个月的奋战,我终于把 xx 视频号搞定了。商务立马拿研发成果去跟甲方公司吹牛逼,看我们可以撸某 APP 数据,其他投标公司不能做。然后公司顺利拿到某大公司的合作合同。这一签就是3000万!!!后面又搞了几个APP,反正都是大家手机上天天用的那几个APP吧。

对“42k,100万股票” 说 “No”

我站稳脚跟了,下一步我要“教”这个老板做人。只要985、211是吧?OK!我骑驴找马,继续投简历,找下家。面了N多公司吧,当然有很多公司都没过。原因大家自己想吧,前面我也给大家普及了爬虫技术栈的误区,也有我其他方面的原因吧。

我确定下家提离职几天之后,老板跟总监开会指定下一步的数据采集策略。总监跟老板说我提离职了,还补了一句‘你招到他算是招到宝了’。老板叫我去他办公室,问了下为什么离职?

我当然不能说因为你那句‘我们只要985、211’的话,我就告诉他去意已决…省略很多…老板:”我给你涨到42k+100W股票(分四年拿清),我想你做我的技术合伙人。目前公司市值x个亿,三年内公司会在创业板上市…我开这家公司9年了,从来没遇到像你这么能做爬虫的,你要是能留下来,以后你直接汇报给我(连升两级),8个人的爬虫团队给你带”。

我内心:“你不是要985、211的吗?”。我拒绝了,做我的老板可以没能力、没背景、甚至“没钱”。但是你要是只看学历,就不行。

这是我的底线。

我这么给大家打个比方吧,你们搞前后端、客户端、Java、Python、C++的都是正向工程,你们每天都是在熟练驾驶着各种框架,有时候把框架做些小小改动就认为自己牛逼了。感觉没啥事就去研究算法,看看怎么码砖更优美。

爬虫/逆向的人,工作性质决定了我们不太需要关注什么 JVM 内存模型、GC调优、各种排序算法、数据结构什么b+树、红黑树…,我们也没有时间去了解。

这些需求每个编程语言的标准库已经完全够用了。

爬虫工程师不像你们正向开发工程师需要去了解开发语言和框架的“发动机引擎”。所以我有时候遇到面试官很偏向问什么算法的、开发框架底层原理我内心那个火。

你爬虫技术垃圾可以,但是对爬虫技术也没有一个正确的认知,那必定你招的人也很垃圾啊。因为你用做后台的考核方式去招聘做爬虫的人,那你招的到也都是工程能力OK,但是对爬虫略知一二这样的人。

其实,爬虫/逆向工程师最重要的是去了解各个操作系统的设计规则和一些应用加载机制。比如你做web爬虫的,你得懂浏览器内核渲染机制吧,js反机器识别原理?怎么去机器指纹?怎么定位加密函数?AST语法树解混淆代码?动态字体怎么破?滑块怎么破?

非爬虫工程师所了解的搞IP池那都是基本功,能光靠搭建代理池就能解决问题,还要我们这些专业的爬虫工程师干什么?

你搞Android逆向,你得懂一些安卓应用开发的知识吧。安卓四大组件是什么?别上来就用jadx看app源代码,那你只会一脸懵逼。安卓反调试机制怎么实现的?怎么找签名方法?

某年轻人:“直接源代码搜索关键词不就行了吗”。源代码混淆了怎么办?加壳了怎么办?就算你把java层签名函数搞定了,后面你会发现你的知识还是不够用。

别人后面把签名函数放在so里面,你得懂汇编吧。代码寄存器、段地址寄存器、偏移地址寄存器、跳转指令、返回指令、ollvm等等。这些知识,那才叫真正的晦涩难懂。

等你学会了95%以上逆向分析的技术,别人突然不玩http(s)了。人家搞一套自己的协议,mmtls听过没有?你们现在每天用的微信就是走的这个协议。你还想抓包?想得美!

年轻人说:“那用tcpdump、Wireshark抓包不就行了吗?”。能说这话的都是外行,现在哪里还是20年前的互联网。什么协议没有加密?你用这些抓的原始tcp数据包能看到的都是加密1010。

所以,APP逆向/爬虫技术发展到后面就有了诸如沙盒(其实就是安卓上的虚拟机)、注入调用、hook等一些比较淫乱的技术。从某种概念上去理解这些技术的发展,就是为了用工程化的能力尽量替代更加底层低效的纯逆向工程。

于是就有了半脱机协议,就是难以破解还原的加密方法我通过注入调用的方式去调(黑盒调用),拿到加密结果后面接着走接口。但是慢慢人家调用链路检测上来了,你直接调用也不好使了。

我有一次做 xxx App 的逆向发现, xxx App 就会对调用链路进行检测。总之,爬虫本质是一种作弊的行为,而作弊又有高级和低级之分。低级的爬虫,就是玩自动化的,搞个类似按键精灵的东西去点点点。手机上再配一个mitmproxy截取流量,更低级的直接从屏幕上的元素读取信息。抓取量大了,这种技术就费劲了。

PS:推荐观看:Java八个实战项目合集自学课程B站:BV1Ch411v7fP

你可能感兴趣的:(程序员的爬虫历程)