圈外人,看个一知半解。牛哇
前言:
由于众所周知的原因,目前的招聘就业信息存在失真,为了得知市场的真实需求(Just for fun)以及为个人职业发展指明方向,特写此文“数据抓取艺术——以BOSS直聘为例”,选取BOSS直聘是因为该软件上岗位数量较多,分析起来样本量大。主要通过RPA(机器人流程自动化)技术抓取该招聘网站的招聘信息供数据分析。看过我之前文章的朋友可能知道我曾经使用过Python爬虫爬取过网页信息,这次不使用Python或者C++进行数据抓取的原因是该招聘网站反爬实在牛逼,前端经常改,Python很容易触发反爬且需要较长的调试时间,RPA模拟人工操作+ip池代理不容易触发反爬。
本文的数据抓取分为岗位概览抓取和岗位详细抓取(后文混合起来写),抓取的关键词是“嵌入式软件”,但BOSS直聘会把一些与此无关的岗位内容混杂在搜索页,因此大体思路先抓取岗位概览后进行数据清洗再抓取岗位详细。
正文:
1、经常上BOSS直聘的朋友可能知道25.4网页UI改版,之前网上流传的BOSS直聘爬取教程和软件几乎全部失效,咸鱼上贩卖的BOSS直聘招聘信息大多也同样只更新到25.4便停止更新。每当我想分析就业趋势时常苦于没有数据支撑结论,卒自己手搓爬取程序爬取招聘网站信息。如前文的原因,选用RPA进行数据抓取,在目前市面上常用的RPA中选定了影刀RPA(还有一个用过的RPA是八爪鱼采集器,这个免费开放的接口很少,基本上需要开会员才能使用,用起来比较僵硬),主要的原因是接口开放比较多,同时提供Python接口,可以直接调用Python封装官方没提供的功能。本文不包括环境搭建、软件下载安装等,请自行解决此类问题。
2、这里先提BOSS直聘的部分反爬机制和应对措施
反爬机制:
(1)打开BOSS直聘后需要登录才能查看更多岗位,否则只显示数十个岗位供查看。
(2)直接搜索岗位信息并反复刷新,推荐出来的岗位几乎一样(尝试过爬一晚上,爬出几万个岗位概要,清洗去重后只有七八百个和搜索词相关)。
(3)插入部分无关岗位作为干扰
(4)同一IP哪怕通过验证码检验,一天最多浏览1500个岗位详细(反正有限制,具体没统计)
应对措施:
(1)在抓取岗位概要时登录查看(不会变成黑号,抓取的间隔调长(大约二十秒刷新切换一次),一小时大概能抓8000个岗位概要)
(2)利用BOSS直聘自带的筛选工具缩小范围使呈现出的搜索结果重复性降低(使用该方法抓取8000条信息近4500条都是有效唯一且与检索词相关的岗位概要)
(3)数据清洗(人工清洗)
(4)使用ip池走代理(熊猫代理,使用动态隧道)
3、下面介绍一些我的爬取策略和思考实践过程
(1)直接爬取策略:爬取BOSS直聘初期,我直接在搜索框输入“嵌入式软件”并选定区域为深圳(因为我在深圳工作,欢迎线上线下交流),每30s刷新一次页面并模拟鼠标滚轮滚动到页面底部25次(其实20次就到底部了,选择25次是为了留余量,这个次其实就是旧版的页的概念,旧版搜索一个关键词最多显示20页),每次相隔1s,页面全部加载完成后抓取该页面的岗位概要。出现的问题主要是爬出几万个岗位概要,清洗去重后只有七八百个和搜索词相关,余下的都不相关。
分析:BOSS直聘推荐的岗位应该和之前的搜索记录有关系,部分算法认为不匹配的岗位不会被推荐。那么便需要绕过或部分绕过这个推荐匹配算法,获取到尽可能多相关的岗位概要。
解决措施:限定更小的搜索范围就能获得相关性较高的岗位信息,比如说搜索“嵌入式软件”关键词,并限定区域为深圳南山,此时的有效岗位概要信息可占比达到80%,同理,筛选栏每个限定条件都遍历一遍即可获得较优质的岗位概要。
(2)遍历限定条件爬取策略:使用如上的解决措施,成功爬取到大约4500条(BOSS直聘APP的薪酬查询处给出的深圳嵌入式软件工程师的岗位数是19000+,实际上根本没有这么多,分析下来这个差值大概率是僵尸岗位,即发布于半年以前且发布者不登录BOSS直聘)左右的有效信息,如果直接从岗位概要网址列表开始爬取详细信息,同一IP地址缓慢(一条等待10s)抓取几百条后就会提示进行人机检验,手动通过几次检验后直接封ip,非常烦人。
分析:触发BOSS直聘反爬,使用魔法上网软件切ip后可以正常访问,由此得出触发人机校验后切ip即可继续爬取。
解决措施:每次需要人机检验时直接切ip(使用单线程爬取,毕竟购买ip池需要实名,免得干猛了被线下制裁)继续爬取,因此需要ip池。
(3)ip隧道代理爬取:使用如上的解决措施,成功爬取到4500+岗位的详细信息,耗时4小时,消耗400ip(2元左右)。尝试过普通代理,发现ip很脏,几乎全部不可用,使用隧道动态代理基本上70%可用。
最终爬取下来的职位概要数据如图
最终爬取下来的职位详细数据如图
看看最高工资(70-100K)的职位有什么需求,如图
再看看一个40K-70K 20薪的岗位
再看看一个40K-70K 15薪的岗位
4、数据爬取下来接下来便是数据分析,开始时简单清洗了岗位的详细内容信息然后运行分词算法和聚类算法,发现跑出来的效果很糟糕,再次数据清洗和微调了参数也没有明显效果。
回归最开始的目的发现完全可以人工分析数据,工作量比较小,直接筛选出和嵌入式某些技术相关的关键词的条数就可(比如说STM32,RTOS,Linux(因为已经筛选过是嵌入式软件岗位,这里的Linux可以理解为嵌入式Linux),QT(注意不要把MQTT混进去了,需要QT数量减MQTT数量才是QT数量)等)。从数据上可以轻松看到市场对于某项技能的需求,每个月都抓取一次便可以绘制出专业技能需求曲线。
同时也能分析薪资与公司规模关系,薪资与地段关系,薪资与工作年龄关系,行业发展趋势等等,反正数据抓下来了,剩下的就是分析的事情了(其实分析才是最重要的)。
如下图是最低薪资(比如10-15k取10k)与岗位数的折线图
如下图是工作经验与需求占比的饼图
如下图是专业技能的需求占比,可以看到嵌入式MCU控制需求和嵌入式Linux驱动/应用需求大约37开。
由于影刀RPA不提供项目或源码导出,因此我下面提供截图供参考:
下图是岗位概要抓取的代码(其实也不是代码了)参考
(1)打开BOSS直聘
(2)等待5s登录BOSS直聘
(3)打开整理好的岗位缩小筛选范围后的网址EXCEL表
(4)循环网址
(5)循环一次就行,类似于遍历一次
(6)转换成字符串,使用Python,这里我是使用影刀RPA的AI助手自动生成的
(7)打开EXCEL表中整理好的第一个缩小了搜索范围的BOSS直聘网址
(8-11)循环25次滚动到底部
(12-15)数据抓取
最后导出数据即可。
下图是岗位详细抓取的代码(其实也不是代码了)参考
(1)打开前面导出的岗位概要EXCEL
(2-8)GET请求获取一个IP
(9-34)岗位详细抓取
(9)注释掉了,不用管
(11)转字符串
(12)打开EXCEL中的BOSS直聘岗位详细,注意设置代理,同时超时等待时间设置长一点,因为使用了代理速度会比较慢,我给的是15s
(13)判断是否有岗位名称出现(如果没出现就是被反爬触发人机检验了)
(14)设置单一网址错误重试次数,防止程序卡住
(15-28)错误重试,如果成功打开了网址或超过10次仍然打不开就跳出循环
(29)数据抓取
(30-32)岗位的网址数据和岗位详细数据一同写入EXCEL,方便后面转跳原链接查看
使用影刀RPA在谷歌浏览器(影刀浏览器实测无法接入代理)接入代理方法:
结束语:
数据抓取艺术这个系列教程后面随缘更新,也算是完成了之前提到的QT上位机和BOSS直聘数据抓取这两篇文章了,这个系列的主干我认为是完成了,分别使用Python bs4库和RAP进行了数据爬虫。文中展示的数据是25.6.1抓取的,每个月(平均一个月就五六百个新增岗位,甚至两个月抓取一次颗粒度也够)抓取个一次差不多就能分析了,实际上从6.1-7.3一个月时间深圳嵌入式软件只新增了大约600个岗位(这个数量和BOSS直聘的嵌入式软件岗位新增数据能对上)。分析下来最大的感受是:官方(招聘公司)给出的数据很有统计艺术。
PS:放只猫猫上来
PPS:回复均有KCB,欢迎各位讨论
PPPS:感觉好久没看到论坛的红包了
猫猫可爱!
很喜欢这个系列,现在国内很多地方封闭生态,自家平台外面搜不到。比如微信qq bing都搜不到,可不可以出一期爬微信的教程
虽然说看不太懂,但仍感觉十分牛
200字以内,仅用于支线交流,主线讨论请采用回复功能。