gitbook/反爬虫兵法演绎20讲/docs/492817.md

223 lines
15 KiB
Markdown
Raw Permalink Normal View History

2022-09-03 22:05:03 +08:00
# 17 | 招聘篇如何写一个合适的JD
你好我是DS Hunter反爬虫专家又见面了。
我在开篇词里说过,学完前两章的你,单兵作战的能力已经达到了极致。那么现在,我们就一起开始从单兵作战到团战的跨越。或者,你也可以理解为我们要实现从技术到管理团队的跃迁,**开启反爬虫团队作战的新模式。**
反爬虫搭建团队第一件事就是招人。而招人的第一件事就是编写一个合格的JD。
如果你曾经做过管理你可能会说这个我熟JD如何如何写能够写得精准给应聘者更好的感受寻找到匹配的人才。
你的经验是非常正确的。但是我们来看这样一个故事:
> 一个冷风嗖嗖的春天,一个朋友找到我:“哥,帮个忙,我们被竞对爬的不行了,他们技术太牛逼了,我们检测了各种框架都被绕掉了,你有办法帮我们看下他们的规律不?我把日志权限开给你。”
>
> 我说“是你们的XX竞对吗
>
> “是的。”
>
> “稍等我十分钟。”
>
> 十分钟后,我给了他们一份文档,里面详细写了对方使用了什么技术,后端什么样子,破解用的什么,人员组成是什么样的。
>
> 朋友大惊:“你这太强了,怎么做到的,我日志里都找不出这么全的信息!”
>
> 我立刻甩给他一份JD——他们的竞对正在招聘爬虫工程师长长列出了各种需求甚至根据薪资情况还能推出对方能招到什么样的人。
>
> 朋友不屑地说:“切,我还以为多厉害呢。”
你看,反爬就是这么憋屈,你的每一个操作都像一个魔术,一旦揭秘了,对方就会觉得:哦,不过如此。
然而过了不到一周:
> “哥,我们这面反爬团队也搭了半年了,至今也找不到什么人啊。你看有没有办法帮我看看?”
>
> 我又甩出一份JD给他。这是他们自己在网上发布招聘的JD基本啥都是面议。我说“你写这么点谁知道你们要干啥啊这有人应聘就出鬼了。”
>
> “你说得对”朋友恍然大悟“我马上去改改JD这谁写的JD太业余了。我得把我们的要求全写出来比如我们需要……咦等等是不是……”
>
> 朋友忽然好像又想起了什么。他翻出之前我发给他的竞对JD陷入了沉思……
看吧现在你还觉得JD好写么
现在各个厂的JD其实很混乱小厂么写得详细无比因为他希望你入职就能直接干活。大厂嘛JD跟写着玩似的根本不在乎你之前做没做过因为他有培训机制只需要优秀的人才即可。
爬虫和反爬虫领域也有类似的问题只不过小厂通常没有反爬虫因此少了一种情况。所以我们要写的JD有三种大厂爬虫大厂反爬虫小厂爬虫。后续我们会分开讨论。我们先看下JD的通用规则。
## JD通用规则
JD是候选人接触公司的第一窗口它的好坏直接决定了应聘者对你的第一印象。一般说来JD的要求是内容丰富、精准、简洁。
具体内容主要包括:
1. 岗位工作内容,职责,汇报线(可选)
2. 任职必备资格
3. 技能以及经验要求
4. 薪资结构区间
其中第二点慢慢在淡化。由于学历歧视的问题越来越多的公司开始在JD里去掉学历要求。同理还有年龄要求性别要求等等。当然这些要求可能并未去除只是变成了潜规则。慢慢的似乎就没什么必备资格可言了。因为随便写点什么都可能引发PR问题那还不如不写。
JD的初始写作者通常是技术人员然后HR做审核。有些技术人员可能觉得HR审核的时候没有改什么但是实际上HR的修改通常比较核心。例如你有学历要求他帮你去掉了一定不要和他争。不要担心找来的人不符合要求要知道第一你们是有面试的第二JD通常分内外版本外部版本是给候选人看的内部版本才是用来筛选的这是常规操作——你的反爬信息收集不还分爬虫可见版本和内部解密版本吗
### 大厂JD潜规则
大厂的JD跟玩似的。
这真不是黑大厂你去看看线上JD就会发现小厂写得还挺详细的大厂的JD就跟随便写着玩似的甚至有HR坦诚清晰地和你说不用看JD那就是随便写的。很多初次面试大厂的人都对此很不习惯。
其实大厂的HR也很为难JD写太详细了容易被人挑毛病。不如写得含含糊糊的之后万一想拒了你也可以说不符合要求。如果写详细了容易被人杠你这么多要求我全符合你凭啥说我不符合要求。但是少写点解释起来就可以天马行空了。
举个例子要求Vue熟练。
你Vue特别厉害怎么考也考不倒但是另一个候选人接了offer必须拒绝你就很难找理由。但是如果JD写要求Web主流框架熟练。Vue你考不倒还有React吧不行问jQuery总有办法的。
出于这种潜规则你的JD本身也要符合这样的要求。此外记不记得我们前面的故事里JD太详细会被别人直接抓出技术栈所以这也是出于行业的特殊性不得不这么干啊
### 小厂JD潜规则
小厂的潜规则则刚好相反。
小厂自由奔放很多不用考虑那么多PR相关的事情极端的特别小的厂逼急了甚至都敢倒闭。可是针对人员要求他们的要求则极为精准恨不得连你之前用哪个框架都有限制巴不得天下候选人都是为自己量身定制的。
此外,小厂对大厂候选人有时候迷之崇拜,有时候又坚决不用——当然,大部分情况下是因为薪资接不住。
## 爬虫反爬虫JD分类讨论
了解了大厂和小厂的潜规则之后我们JD的改进方向就有了。我们按照大厂和小厂的爬虫、反爬虫细分下分别来看。
### 大厂反爬虫
首先第一个,大厂的反爬虫。
大厂的优势是只要应聘者聪明一切皆可培训。那么大厂写JD这件事其实就很简单了。这个时候他有两个选择
1. JD直接要求招反爬虫的人
2. 自己不写JD在安全和前端的求职者里面去捞人
首先第一个自己写JD招人。秉承着大厂一切含糊处理的精神这里举一个反爬虫的例子
> 了解前端反爬虫对抗,有实际对抗经验
这里并没有说用什么办法对抗,也没有说我们希望如何对抗。是重规则引擎,还是重前端加密?实际上,都是可以的。
事实上这类JD只是用于初步筛选一下应聘者的技术栈点在了哪里。从前面所有课程我们可以看到反爬虫的天赋技能学习主要是点前端的但是顺便也要点一部分后端。因此两部分都是有要求的。
那么,在上面这句话的要求下,其实还需要再补充一句:
**“针对数据库访问,缓存以及日志系统有自己的见解”**
为什么一定要提自己的见解?
因为后续HR在拒绝面试人的时候如果面试人不依不饶非要给个说法HR还可以在“自己的见解”上面发挥空间。当然这只是用于兜底的大部分候选人都很忙同时在面好多家没有时间和HR扯。不要妄自尊大觉得自己同时面了很多求职者就觉得自己牛了。实际上求职者也同时在面多家。这是一个多对多的关系。
最后关于薪资。大厂薪资其实相对是比较透明的,没有太多的议价空间,大家也不是很在乎。最终,大家还是以面试结果定级为准。
### 大厂爬虫
好,终于到了大厂爬虫这个十分尴尬的分支了。
十分讽刺的是大厂通常不对外承认自己有爬虫团队——虽然为了避免热度也不特意去否认。不过他们确实也在招聘平台上放出了大量的爬虫工程师岗位。目前有的大厂已经在注意这类岗位带来的PR风险并尽量避免了而有的大厂却依然不当回事直接挂着职位。
其实正确的做法应该是在反爬虫的JD里顺便招爬虫工程师。不过那样效率太低了大部分情况下大厂还是在直接招聘。所以我们还是来看一下这种情况下的JD。
举个例子。随手找到一个JD就不列举公司名称了。它是这么写的
> 五年以上爬虫工作经验精通Java开发
> 丰富的电商数据爬取经验
> 熟悉各类反爬虫策略,并有丰富的反反爬虫实战经验
这段JD直接告诉了全世界他们在电商领域有个竞对并且他们在爬竞对数据。
那么如何修正这个问题呢?
很简单第二条直接删掉即可。这样即使你在招爬虫工程师别人也不知道你要爬谁。你完全可以说我们有个合作伙伴因为API来不及开发了不得不用爬虫来做。虽然大家都知道你在撒谎你也知道大家都知道你在撒谎可是你就是可以继续撒谎能怎么样呢
何况,电商爬虫属于通用爬虫,电商本身并没有什么与众不同的地方。这一条完全是多此一举。
除此之外这个JD还能分析出什么
是的他们使用的爬虫框架是Java。没错不是Python不是Node是Java这个非主流的爬虫语言。
一旦锁定了语言,那么他使用了什么框架,范围就缩小了很多。你可以逐步检测特征,慢慢就能检测到他用的是什么框架了。如果不说是什么语言,全世界所有的框架一个一个试,你要试很久了。
那么如何修正这个问题呢?
有两个办法,一个依然是删掉,另一个是,有意指定一个错误的语言来误导对方。
所以呢你可能会问我会不会他们实际上使用的并不是Java呢这个问题提的非常赞虽然我也不能保证什么不过只能说试试检测Java并不亏哦
我们再来看一个正面例子:
> 负责爬虫系统的核心技术研发,支持海量数据采集分析,实现业务赋能。
> 负责互联网资源特征挖掘,包括页面特征,价值,变化趋势等等
> 设计各种策略与算法,提升爬虫系统资源收录与更新效果。
你看这个JD和上面的JD比起来就更“大厂”了一些不但啥细节也没透露还说了一大堆没用的废话。换言之不说人话这正是大厂在PR压力下的生存之道。
### 小厂爬虫
小厂的爬虫就嚣张跋扈了很多。
我们刚刚提到JD提爬虫会引发风险。注意这里的风险大部分不是法务风险仅仅是PR风险而已。要知道走法务流程证据是十分重要的。你不能说我发布了一个JD说要招爬虫工程师那就证明我已经有爬虫团队了对吧更不能说我已经在爬竞对了。因此小厂的JD你可以尽可能精确要求候选人需要什么技能。
还是举个例子:
> 一年以上爬虫相关经验Python优先
> _实际上他们就是在用_Python\*
>
> 熟悉各种抓取技术,熟练使用正则表达式从各网页中提取信息
> _他们真的在用正则因为正则真的很快_
>
> 了解JS逆向以及App逆向
> _说明他们同时抓竞对两个版本很可能还存在跨平台比价_
>
> 对用户增长理念认同者优先。
这个JD我们可以得出结论他们在用Python抓取竞对同时抓取JS和APP而且很可能存在跨平台对比。同时因为使用的是正则要么他们爬虫水平特别棒要么竞对反爬特别不给力。
但是需要修改吗?不需要!
小厂怕啥啊逼急了敢倒闭的主你拿个JD去起诉人家法官都要笑话你啊。
这样精准的描述可以快速拿到合适的人选。虽然反爬虫方搜一下你的JD就知道你的玩法了但是一般说来他也没什么办法啊不然也不会沦落到用正则就能直接提取出网页信息的地步。如果爬虫能被逼到起浏览器抓取那怎么着JD得要求xPath能力吧或者其余选择器。
不过如果想再优化一下也是可以的。你可以多加点信息然后面试的时候再筛一下人。例如你可以说熟悉PythonJavaXXX……等等语言的优先。即使这些语言你不用大不了简历筛选不通过嘛。就算简历筛选过了还有面试呢一面就能拦住不要虚。
### 加餐:小厂反爬虫
这个加餐加得我非常纠结。
因为原则上来说,小厂很少做反爬虫。能玩得起反爬虫的,基本上都成为大厂了,至少是垂直领域的老大。所以,小厂反爬虫……真的在这个世界上存在吗?
但是很多小厂找我寻求过技术支持。因此可见,他们虽然玩不起,但是还是存在这个需求的。
但是小厂的反爬虫真的出不起成本。因此我的建议是不如干脆让爬虫leader兼职反爬虫带一个人顺手做做就好了。反爬本来就是一个烧钱的项目ROI又极低小厂尤其是创业公司本来现金就非常宝贵干嘛非要砸这个钱呢
因此需要在爬虫的JD里面加一句“能同时实现反爬虫需求”。这就足够了。
## 自驱
自驱这个词已经被一些大厂玩的快成为贬义词了。但是,这个词本身的含义是很正面的。假设你是一个爬虫或者反爬虫的 Leader在你主动出击寻找对应的人才的时候完全可以因人设岗。这个情况下你就不需要写JD了。因此你也就不用为这个问题苦恼了。
是的我曾经去面试过一个反爬虫的岗位。他们的JD写的是前端开发工程师……
## 小结
这一节我们主要探讨了大厂与小厂爬虫与反爬虫所有情况下的JD写法。
由于大厂对PR风险考虑更高小厂对人员精准、降低用人不匹配问题的要求更高因此大家各有各的写法。大厂更偏向于通用描述小厂更偏向于详细要求每一个细节。
总体来说反爬虫JD可以写得细致而爬虫JD则要考虑法务风险尽可能不要提“破解”更要尽量做到不暴露自己的技术栈与框架这是几个基本原则。
## 思考题
好了,又到了愉快的思考题时间。还是老规矩,三选一。
1. 一个公司发了一个JD要求应聘者同时做过爬虫和反爬虫你认为他们实际上想招哪一个
2. 你和HR说要招一个爬虫工程师HR直接去网上搜了个JD。这样最坏可能引发什么问题
3. 如果真的用JD做证据起诉对方爬虫团队居然还赢了那么你觉得最大的可能性是爬虫团队犯了什么错误
期待你在评论区的分享,我会及时回复你。反爬无定式,我们一起探索。
![](https://static001.geekbang.org/resource/image/4d/bf/4d1aea862b6a2b5229ed54fda5a7ddbf.jpg?wh=1500x1615)