新闻中心

今年的就业形势有多严峻?Python爬取招聘数据来分析

2023-05-11
浏览次数:
返回列表

按照惯例,往年的政府工作报告都要提出国内生产总值预期目标,但今年在5月22日公布的政府工作报告中,着重强调要集中精力抓好“六稳”、“六保”,并没有提出全年经济增速具体目标,最重要的原因是全球疫情和经贸形势不确定性很大。要守住“六保”底线,这就意味着今年就业将成为最主要的宏观经济管理目标。

最近经常可以听到“裁员”、“降薪”、“工作难找”等热词。疫情的常态化、全球化告诉我们,“保住饭碗”、“找到工作”、“苦练技术内功”是今年职场员工要的最重要的事情了。

为方便大家清晰了解当前就业市场,小编对招聘网址51job进行了数据爬取,共计获取5万份招聘数据,代码、数据仅用于技术交流使用,内容首发于WX公众号:Python学习与数据挖掘,需要数据和完整版代码的同学,公众号后台回复:招聘代码。我们将基于爬取的数据,比较了不同岗位的薪资、学历要求,分析比较了不同区域、行业对相关人才的需求情况,分析比较了不同岗位的知识、技能要求等。

网页分析

在爬取网页数据之前,需要对网页进行分析,不断翻页我们可以发现网页为GET请求,URL有如下规律:

https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE,2,4.html? https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE,2,3.html? https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE,2,2.html? https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE,2,1.html?

数据获取

分析网页后,我们要确立爬取思路、爬取字段、使用工具等,详情如下:

爬取思路:先针对某一页数据的一级页面做一个解析,然后再进行二级页面做一个解析,最后再进行翻页操作;爬取字段:公司名、岗位名、工作地址、薪资、发布时间、工作描述、公司类型、员工人数、所属行业;使用工具:Python+requests+lxml+pandas+time;网站解析方式:Xpath;

1.导入相关库

import requests import pandas as pd from lxml import etree import time import warnings warnings.filterwarnings("ignore")

2.字段解析

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、工资 salary_mid = dom.xpath(//div[@class="dw_table"]/div[@class="el"]/span[@class="t4"]) salary = [i.text for i in salary_mid] # 5、发布日期 release_time = dom.xpath(//div[@class="dw_table"]/div[@class="el"]/span[@class="t5"]/text()) # 6、获取二级网址url deep_url = dom.xpath(//div[@class="dw_table"]/div[@class="el"]//p/span/a[@target="_blank"]/@href) RandomAll = [] JobDescribe = [] CompanyType = [] CompanySize = [] Industry = [] for i in range(len(deep_url)):     web_test = requests.get(deep_url[i], headers=headers)     web_test.encoding = "gbk"     dom_test = etree.HTML(web_test.text)     # 7、爬取经验、学历信息,先合在一个字段里面,以后再做数据清洗。命名为random_all     random_all = dom_test.xpath(//div[@class="tHeader tHjob"]//div[@class="cn"]/p[@class="msg ltype"]/text())     # 8、岗位描述性息     job_describe = dom_test.xpath(//div[@class="tBorderTop_box"]//div[@class="bmsg job_msg inbox"]/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 = dom_test.xpath(//div[@class="tCompany_sidebar"]//div[@class="com_tag"]/p[3]/@title)

3.数据展示

总结

本篇文章主要对51job进行爬取,小编分享两点经验,首先:由于爬取页数较多,可以尝试利用多进程、多线程进行爬取,来提高爬取效率;其次:为了代码的鲁棒性,要加入异常处理机制。因篇幅原因,下一篇文章我们将对招聘数据进行数据分析和可视化

,感兴趣可以继续关注阅读。

搜索