当前位置: 首页 > 科技观察

用Python爬取13966运维招聘信息,得到了哪些结论?

时间:2023-03-20 10:14:17 科技观察

大家好,我是JackTian。经常会收到读者一系列关于运维的咨询,比如:杰哥,运维到底是做什么的?运维的薪资水平/待遇如何?杰哥帮我看看这个职位的招聘要求适不适合小白?etc.在这里,我之前写过《一篇文章带你解读从初级运维工程师到资深运维专家的学习路线》。本文从初级/中级/高级运维工程师向高级方向逐步展开,为大家总结了每个阶段的一些技巧。仅供学习路线参考。如有补充,可以使用本文留言参与互动。这一次,杰哥带着一个好奇的想法,结合自己的工作经验,结合行业内的全国情况,对招聘运维工程师的职位进行了初步的分析。我的好朋友——黄伟,帮我爬取了13966条运维招聘信息,看看哪些数据有相关差异。主要包括:热门行业用工需求Top10热门城市职位数量Top10职位分布省份不同公司规模职位分布Top10职位平均薪资学历要求词云分布运维职位需求为此文章叙述,我们将分以下三个步骤为您讲解。爬虫部分的数据清洗与数据可视化分析一、本文爬虫部分主要爬取51job。运维相关岗位的数据,网站分析主要使用Xpath,数据清洗主要使用Pandas库,可视化主要使用Pyecharts库。相关注释已在代码中注明,为方便阅读,此处仅展示部分代码,完整代码见文末。#1。作业名称job_name=dom.xpath('//div[@class="dw_table"]/div[@class="el"]//p/span/a[@target="_blank"]/@title')#2、公司名称company_name=dom.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t2"]/a[@target="_blank"]/@title')#3、工作地点address=dom.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t3"]/text()')#4,salarysalary_mid=dom.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t4"]')salary=[i.textforiinsalary_mid]#5,发布日期release_time=dom.xpath('//div[@class="dw_table"]/div[@class="el"]/span[@class="t5"]/文本()')#6。获取二级URLurldeep_url=dom.xpath('//div[@class="dw_table"]/div[@class="el"]//p/span/a[@target="_blank"]/@href')#7。爬取经验和教育信息,先放到一个字段里,后面再做数据清洗。命名为random_allrandom_all=dom_test.xpath('//div[@class="tHeadertHjob"]//div[@class="cn"]/p[@class="msgltype"]/text()')#8、Job描述信息job_describe=dom_test.xpath('//div[@class="tBorderTop_box"]//div[@class="bmsgjob_msginbox"]/p/text()')#9,公司类型company_type=dom_test.xpath('//div[@class="tCompany_sidebar"]//div[@class="com_tag"]/p[1]/@title')#10、公司规模(人数)company_size=dom_test.xpath('//div[@class="tCompany_sidebar"]//div[@class="com_tag"]/p[2]/@title')#11、industry(公司)industry=dom_test.xpath('//div[@class="tCompany_sidebar"]//div[@class="com_tag"]/p[3]/@title')2.数据清洗1)读取数据#下面用到的相关库,这里展示importpandasaspdimportnumpyasnpimportreimportjiebadf=pd.read_csv("only_yun_wei.csv",encoding="gbk",header=None)df.head()2)Setnewrowandcolumnindexforthedata#指定数据框的行索引df.index=range(len(df))#为数据框指定列索引df.columns=["positionname","公司名称","工作地点","工资","ReleaseDate","ExperienceandEducation","CompanyType","CompanySize","Industry","JobDescription"]df.head()3)去重处理#去重前的记录条数print("去重前的记录数",df.shape)#去重后的记录数df.drop_duplicates(subset=["公司名称","职位名称","工作地点"],inplace=True)#去重后的记录数print("数字ofrecordsafterdeduplication",df.shape)4)postname字段的处理#①postfieldname的探索df["postname"].value_counts()df["postname"]=df["jobname"].apply(lambdax:x.lower())#②构造你要分析的目标位置,做一个数据筛选df.shapetarget_job=['运维','Linux运维','运维维护开发','devOps','应用运维','系统运维','数据库运维','运维安全','网络运维'ce','桌面运维']index=[df["Job名称"].str.count(i)foriintarget_job]index=np.array(index).sum(axis=0)>0job_info=df[index]job_info.shapejob_list=['linux运维','运维开发','devOps','应用运维','系统运维','数据库运维','运维安全','网络运维','桌面运维','it运维','软件运维','运维工程师']job_list=np.array(job_list)defrename(x=None,job_list=job_list):index=[iinxforiinjob_list]ifsum(index)>0:returnjob_list[index][0]else:returnxjob_info["jobname"]=job_info["jobname"].apply(rename)job_info["职位名称"].value_counts()[:10]5)薪资字段的处理job_info["薪资"].str[-1].value_counts()job_info["薪资"].str[-3].value_counts()index1=job_info["salary"].str[-1].isin(["year","month"])index2=job_info["salary"].str[-3].isin(["million","thousand"])job_info=job_info[index1&index2]job_info["salary"].str[-3:].value_counts()defget_money_max_min(x):try:ifx[-3]=="million":z=[float(i)*10000foriinre.findall("[0-9]+\.?[0-9]*",x)]elifx[-3]=="thousand":z=[float(i)*1000foriinre.findall([0-9]+\.?[0-9]*",x)]ifx[-1]=="year":z=[i/12foriinz]returnzeexcept:returnxsalary=job_info["工资"].apply(get_money_max_min)job_info["最低工资"]=salary.str[0]job_info["最高工资"]=salary.str[1]job_info["工资水平"]=job_info[["最低工资","最高工资"]].mean(axis=1)6)处理地址_list=['北京','上海','广州','深圳','杭州','苏州','长沙'、'武汉'、'天津'、'成都'、'西安'、'华东东莞','合肥','佛山','宁波','南京','重庆','长春','郑州','常州','福州','沉阳','济南','宁波','厦门','贵州','珠海','青岛','中山','大连','昆山',"惠州","哈尔滨","昆明","南昌","无锡"]address_list=np.array(address_list)defrename(x=None,address_list=address_list):index=[iinxforiinaddress_list]ifsum(index)>0:returnaddress_list[index][0]else:returnxjob_info["joblocation"]=job_info["joblocation"].apply(rename)job_info["工作地点"].value_counts()7)公司类型字段的处理job_info.loc[job_info["公司类型"].apply(lambdax:len(x)<6),"公司类型"]=np.nanjob_info["公司类型"]=job_info["公司类型"].str[2:-2]job_info["公司类型"].value_counts()8)行业字段job_info的处理["行业"]=job_info["行业"].apply(lambdax:re.sub(",","/",x))job_info.loc[job_info["行业"].apply(lambdax:len(x)<6),"Industry"]=np.nanjob_info["Industry"]=job_info["Industry"].str[2:-2].str.split("/").str[0]job_info["好的Industry"].value_counts()9)经历和教育字段的处理|doctor",x))deffunc(x):iflen(x)==0:returnp.naneliflen(x)==1orlen(x)==2:returnx[0]else:returnx[2]job_info["教育"]=job_info["Education"].apply(func)job_info["Education"].value_counts()10)公司规模字段的处理deffunc(x):ifx==['少于50人']":return"<50"elifx==['50-150人']":return"50-150"elifx==['150-500人']":return'150-500'elifx=="['500-1000人']":return'500-1000'elifx==['1000-5000人']":return'1000-5000'elifx==['5000-10000人']":return'5000-10000'elifx==['over10000']":return">10000"else:returnnp.nanjob_info["companysize"]=job_info["companysize"].apply(func)11)构造从处理后的数据中导出新数据并导出为新的excelfeature=["公司名称","职位名称","工作地点","薪资水平","release日期”,"学历","公司类型","公司规模","行业","职位描述"]final_df=job_info[feature]final_df.to_excel(r"Visualization.xlsx",encoding="gbk",index=无)3.数据可视化1)大屏可视化效果2)热门行业Top10就业需求从招聘行业数据来看,计算机软件、计算机服务、互联网、通信行业就业需求占比高于其他行业3)热门城市Top10职位从热门城市来看,北方一线城市、上海、广州、深圳的职位数量相对较多。但是,这里的招聘数据以及结合以往的经验,偏向于外包公司。4)职位省份分布各省份的职位分布,通过最左边的颜色条可以看出,颜色最深的区域招聘的职位比较集中,反之,最浅的是招聘职位较少的省份。从下图看,广东、江苏、上海、北京的颜色分布比其他省份更集中。5)不同公司规模的就业情况因行业而异,公司规模必然存在差异。公司规模是指按照有关标准和规定确定的公司规模,一般分为特大、大型、中型、小型和微型。如下图,公司规模人数在50-500之间,占比超过50%,用人需求最高,1000-10000之间占比较少50%以上,但这样的公司规模已经比较大了。6)前10个职位的平均工资据我了解,系统工程师、软件/实施工程师、运维专员等一系列职位其实都可以划分到运维的范畴。运维工的职称定义不同。为了能够更准确地进行过滤和分析,去掉了那些作业所花费的时间。剩余以下10个职位(运维开发、运维工程师、软件运维、网络运维、系统运维、桌面运维、数据库运维、应用运维、Linux运维andmaintenance,IT运维)这些职位基本上是我看到的招聘信息里最多的。前10个岗位平均工资,运维开发,应用运维,数据库运维,Linux运维都在1W以上。因此,也可以看出运维发展在运维领域的优势在于占据领先地位。7)运维岗位学历要求分布从学历要求来看,大专和本科占多数。学生、硕士、博士基本都太少了,所以我的学生群里有读者会问我,应届生找运维工作容易吗?从我个人的角度来说,我不建议大家毕业后去做运维。因为运维对你个人的技术水平和工作经验要求非常高,而且对于一个应届毕业生来说,没有太多的实践经验,不会有太大的优势,除非这个职位对你有很大的爱好,但是你可以也试试吧。8)运维岗位需求词云图分布从运维岗位招聘需求词云图来看,出现频率最高的词主要有:运维、能力、系统、维护、经验等。技能和以前的工作经验要求很高。当然还有很多其他相关的词频,大家可以通过下图查看详情。总结介绍了这么多,相信大家对运维工程师也有了初步的了解。通过本文,您可以了解哪些行业对运维人员的需求比较高?招聘和运营最热门的城市有哪些?运维岗位分布、不同公司规模聘用运维工程师比例、运维相关岗位平均工资、招聘运维岗位学历要求、哪些词有运维岗位需求词云图中出现频率最高的,通过这个数据的分析,相信可以对你未来的运维求职方向,行业,城市,公司规模,以及希望对您有所帮助。