数据来源:爬取以python为关键字在智联招聘上返回的职位信息
数据采集
1、寻找数据所在的url
a\列表页
通过Chrome查看当前网页里面的响应里面是否包含有页面上显示的数据,比如,在图中搜索了10K-20K没有返回,说明页面上的数据不在当前url地址对应的响应里(建议在判断时尽量搜索数据和英文,因为汉字可能会被编码,所以有时候即使响应里面有内容也搜索不到)
由于响应里面没有我们需要的内容,所以需要去其他响应里面找。响应的内容比较多,挨个找可能花的时间比较久,这里我是先清除了当前所有的响应,然后再点击了下一面,此时响应的链接少了一些,然后再依次找。可以看到页面上的内容在一个JSON字符串里面,对应请求的url地址为:https://fe-api.zhaopin.com/c/i/sou?start=90&pageSize=90&cityId=%E6%B7%B1%E5%9C%B3&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=Python&kt=3&at=56d20126aa02453c841dbe730967fef0&rt=d33493a48f2f4a8dbdcbcf2e4b10f5dc&_v=0.68690445&userCode=633952558&x-zp-page-request-id=ea456405eab849f1b2e3a3d5e5fbb9ca-1547028536778-887626
寻找url地址的规律,可以看出:
pageSize是每一页上的招聘信息的职位数量,默认为90
start是当前页面减1再乘以90,
cityId是职位所在的城市,
kw=Python是我们检索的关键词,
kt=3不知道是啥,试着删除了下,不可以删除,那就保留吧,反正这么短
workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1:是页面上对于工作经验,学历、公司类型等条件的筛选,这里我选择的是不限,对应的都是负1,把这些都删掉后,发现数据的响应没有变化,所以后续直接删掉了。
at=56d20126aa02453c841dbe730967fef0&rt=d33493a48f2f4a8dbdcbcf2e4b10f5dc&_v=0.68690445&userCode=633952558&x-zp-page-request-id=ea456405eab849f1b2e3a3d5e5fbb9ca-1547028536778-887626:这一堆不知道是啥,删除后发现没有影响,果断删除
所以,精简之后的url为https://fe-api.zhaopin.com/c/i/sou?start={}&pageSize=90&cityId={}&kw=Python&kt=3,start是用来翻页的,cityid可以根据我们的需要来填入。
b\详情页
由于要了解工作岗位对于python从业者的要求,需要进入工作岗位详情页获取职位相关信息。用与上面同样的方法可以发现,我们需要的数据就在当前url地址对应的响应里。
2、scrapy程序获取数据
a\创建项目:首先创建scrapy爬虫项目,scrapy startproject zhilian,这里zhilian是为该项目取的名字
b\建立一个爬虫:scrapy genspider zl zhaopin.com。zl是爬虫的名字,zhaopin.com是允许爬虫爬取的域名
c\爬虫主程序
在下载中间件中设置代理,降低反爬发生的可能性
这里是以爬取深圳的python职位为例,要爬取其他城市的职位的话可以手动改下城市名称。本来有尝试重写start_requests方法,得到一个start_city_url列表,再用yield循环传递给parse函数处理,但是后面会造成一些城市的page不是从0开始,跪请高手指点呀!
在pipline中对数据进行处理保存
获取的数据长下面这样:
数据分析
1、整合数据
由于是以城市分别获取的数据,首先将这些数据整合到一起
2、数据清洗
1、缺失数据处理
通过df.info()查看数据基本情况,可以看出数据中不存在缺失值,所以这里不需要处理
重复值处理
为避免数据有中重复的职位,以"position_id"为基准,去除重复值
base字段处理
base字段中有些数据是以"城市—区"的形式,统一处理成城市的形式
salary字段处理
salary字段的数值存在三种类型:区间类型,如10K-12K;薪资面议;1K以下。因为后面要分析薪资情况,所以要将薪资格式统一。这里将区间薪资取平均值;薪资面议的记录约占到总记录数的8%,以所在城市的平均值进行替代;类似于1K以下这种直接取1K。以上处理均上excel中实现,感觉用python处理比excel麻烦,还要继续熟练python的使用,哈哈!
3、分析
总体薪资分布
从图中可以看出,工资水平处于9k-13k这一区间的人数最多,其次是5K-9K,这样看起来貌似工资没有传说中那么高。但是从累计来看,有超过一半的工资是高于13K的,并且图中工资的峰值超过了120K,童鞋们,有没有感觉到前途无限呀!
不同学历薪酬分布
总体看来,学历水平越高,工资水平也越高,但博士、硕士和本科在top值上差不多。相比之下,大专学历下的薪资top值低了很多,中专及中技学历下的薪资top值甚至只有最高top值的十分之一,发展受到了限制。其他这一类别看起来像一根线,并且工资水平超过了硕士工资水平的中位数,具体看下:
其他类别的数据只有一条,从salary的格式可以看出,是在处理“薪资面议”时用城市平均工资替代的。由于数据中学历的类别已经比较全面,可以考虑在数据清洗时把这一条数据归为“不限”类别。同时可以看到,不限类别的箱体较宽,几乎包含了中专、中技、大专、本科。
不同工作经验薪酬分布
在对工作经验有要求的情况下,工作经验越丰富薪资也越高。在无经验类别下,工资的上箱体超过了1-3年及1年以下类别的上箱体,通过查看原始数据,发现无经验类别中的岗位很大比例是针对于应届毕业生的,还是有很多公司愿意以较高的薪资吸引应届毕业生呀!
不同城市薪资及岗位数量分布
可以看出,上海、北京、深圳这三个城市的整体薪资水平高于其他城市,且工资工位数接近20k,有没有很动心呀!从岗位数量来看,这三个城市对于python从业者的需求也较大。成都、广州、南京三个城市的岗位需求量与北上深不相上下。可以看出,python的岗位需要主要集中在一线城市,还有一些快速发展的二线城市对python从业者的需求量也较大,工资水平也相对较高
岗位要求云词分析
python从业者的薪资如此有吸引力,童鞋们是不是很想了解下哪些方面是面试官在招聘时比较关注的呢。使用jieba绘制了工作岗位要求的动力,展示效果不是很好,出现了一些重复的词汇,暂时没有找到原因,请大神指点。可以看到,学历和经验是最常被关注的,这对于想转行从事python工作的小伙伴们似乎不太友好,推荐大家有时间可以逛逛Kaggle,上面会经常有一些项目竞赛,可以尝试参与,还有很多大神可以膜拜。除此之外,学习能力、沟通、团队协作等一些方面也是关注的重点。
分析结论
1、从薪资总体的分布来看,python从业者的工资普遍较高,月薪超过13K的超过一半
2、从不同学历薪资情况可以看出,学历越高在工作发展中获得的工资越高,大专、中专及中技生的发展受到了限制,在工资的发展空间上不如本科、硕士及博士生。从工作要求的云词图中可以看出,企业一般要求python从业者具有本科以上的学历,这在一定程度上解释了他们工资空间的差距问题,因为很多python从业者需要了解一些高等数学知识。
3、从不同城市薪资及岗位需求分布情况得出,一线城市对于想从事python工作的人员来说是较好的选择,这些城市一般岗位需求大,工资水平也较高。同时,处于快速发展的二线城市也是不错的选择,如杭州,南京等。
4、从工作要求的云词图可以看出,学历和经验在找工作时是被最常关注的,企业对python从业者有一定的学历要求。除此之外,学习能力、沟通、团队协作能力也很重要。
网友评论