虽说年后的招聘高峰期已到尾声,但是我们还是可以通过Boss直聘、拉勾等网站获取更多的招聘信息加以分析。
前两天看到一篇文章说今年招聘销售最吃香。那我们就以北京的【销售岗位分析】作为我们本次文章的干货的分享。
本次的干货整体的思路是:
- 使用Python爬虫获取更多的职位信息
- 进行数据展示和清洗
- 可视化展示
第一部分爬取职位信息
我们本次获取的是Boss直聘的信息,我们打开Boss直聘搜索🔍【销售】,但是很遗憾boss直聘的反爬措施不能直接使用requests库获取信息,所以采用webdriver自动化方式获取网页源代码。
webdriver的使用需要大家:
pip3 install selenium
配置chrome浏览器的chrome driver。
a. 查看当前chrome浏览器的版本,在浏览器的地址栏输入:chrome://version
b. 去这个网址下载对应版本的driver:http://npm.taobao.org/mirrors/chromedriver/
c. 将下载的chromedriver放到
Win:
复制webdriver到Python安装目录下
Mac:复制webdriver到/usr/local/bin目录下
这是webdriver就可以使用啦!下面开始在浏览器查询【销售】,查询后的页面如下:
点击了多页之后,发现地址栏的地址变化如下:
https://www.zhipin.com/c101010100/?query=销售&page=1&ka=page-1
https://www.zhipin.com/c101010100/?query=销售&page=2&ka=page-2
https://www.zhipin.com/c101010100/?query=销售&page=3&ka=page-3
所以我们就发现了地址的规律变化,因此代码如下:
import re,matplotlib,time,random #导入正则表达式,绘图,时间,随机模块
from bs4 import BeautifulSoup #BeautifulSoup用于处理获取的网页数据
import pandas as pd #数据分析必备类库
import seaborn as sns #绘图模块
from selenium import webdriver #自动化控制浏览器模块
job="销售" #设置需要爬取的职业信息
page=6 #设置爬取页数
htmls_list =[] #建立网页信息存储列表
for num in range(1,page,1):
url = "https://www.zhipin.com/c101010100/?query={}&page={}&ka=page-{}".format(job,num,num)
driver=webdriver.Chrome() #初始化webdriver
driver.get(url) #自动化运行页面
time.sleep(8) # 爬取的时候网速比较慢,所以打开的时候加了一个延时,保证能获取到数据
htmls=driver.page_source #获取页面信息
htmls_list.append(str(htmls)) #将获取页面信息添加至网页存储列表
driver.close() #关闭浏览器
ran_time = random.randint(10,20) #随机生成停顿时间
time.sleep(ran_time) #程序休眠
print(htmls_list)
此时执行代码,发现htmls_list中有好多的数据。
这下也就放心了,说明我们获取到了网页的数据。
有了数据我们就开始遍历htmls_list,因为htmls_list存放着多页的数据,我们要一页一页的获取并提取里面的职位、薪资等信息。
提取的过程我们使用的是BeautifulSoup,具体的使用说明这里不在赘述,大家可以查看文档。https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/
使用BeautifulSoup提取的数据我们都存放在job_list=[]这个列表中。页面分析如下:
岗位名称
以此类推,我们都可以找到对应的标签。这里就不再逐个截图给大家展示
通过chrome的开发者工具帮助我们分析,我们可以得到如下的代码:
job_list=[] #建立获取职位信息存储列表
for htmls in htmls_list:
soup= BeautifulSoup(htmls) #解析网页
for i in soup.find_all("div", class_="job-primary"):
job = i.find_all("a") #获取招聘岗位信息
area = i.find_all('span', class_='job-area') #获取工作地点
salary = i.find_all('span', class_='red') #获取薪酬信息
title = i.find_all("h3")[1].get_text() #获取企业名称
industry = i.find_all('a',class_="false-link")[0].get_text() #获取所属行业
edu = i.find_all('p')[0].text #获取学历要求
scale = i.find_all('p')[1].text #获取条件信息
url = "https://www.zhipin.com/" + i.find_all("div", class_="primary-box")[0]['href'] #获取详情页信息
job_list.append([title, industry, job[0]['title'],area[0].get_text(),edu,scale, salary[0].get_text(),url])#将所有信息保存至列
到此我们就完成了所有爬虫部分的内容,其中比较关键的知识点就是通过Beautifulsop模块解析到所需内容。
第二部分数据清洗
这样我们就将所有的信息保存到了job_list中,下面我们就开始数据分析和展示了,使用Pandas加载数据
data = pd.DataFrame(job_list,columns=['企业名称', '所属行业', '招聘岗位', '工作地点', '条件', '企业信息', '薪资','URL'])
看一下加载出来的数据:
在数据可视化前我们要对数据进行简单的处理,比如去重、整理薪资的数据类型为数值型。
去重我们使用drop_duplicates对企业名称进行去重,使用正则和lambda进行数值类型转换。
data =data.drop_duplicates(subset='企业名称',keep='first')
#将数据按照招聘企业去重处理
data['max_salary'] = data['薪资'].map(lambda x:re.findall("-(\d.*?)K", x)[0])
data['max_salary'] = data['max_salary'].astype(int) *1000
#通过正则表达式获取薪资的最大值,并整理为数值型
data['min_salary'] = data['薪资'].map(lambda x:re.findall("(\d.*?)-", x)[0])
data['min_salary'] = data['min_salary'].astype(int) *1000
#通过正则表达式获取薪资的最小值,并整理为数值型
data.head()
查看数据发现多出来了两列的内容就是:薪资的最大值和最小值
按照所属的行业进行分组查看,分别获取各个行业的最高薪资的平均值和最低薪资的平均值
df1 = data.groupby("所属行业")['max_salary'].mean().round(2).reset_index().rename(columns={"max_salary":"salary"})
df2 = data.groupby("所属行业")['min_salary'].mean().round(2).reset_index().rename(columns={"min_salary":"salary"})
最高薪资部分数据:
最低薪资部分数据:
现在我们要把最高和最低整合到一张表中,我们就使用到了concat表的连接。
# 分别对df1和df2添加标签label
df1['label'] = 'max_salary'
df2['label'] = 'min_salary'
df = pd.concat((df1,df2))
查看结果如下:
第三部分数据可视化
接下来进行可视化显示
from matplotlib import pyplot as plt
# 解决中文乱码
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
%config InlineBackend.figure_format = 'svg'
# 设置大小
plt.figure(figsize=(15,6))
sns.barplot(x='所属行业',y='salary',hue='label',data=df, palette="Set2")
可视化后的结果是:
当然大家也可以获取多个城市的职位信息,按照城市分组查看。
如何获取多个城市的信息呢?查看链接发现链接:https://www.zhipin.com/c101010100/?query=销售&page=1&ka=page-1
中【c101010100】为城市代码,城市代码也可以通过https://www.zhipin.com/wapi/zpgeek/common/data/citysites.json获取所有城市的代码。需要大家通过requests获取后进行json解析就可以获取,结构很简单。
OK!剩下交给各位了!赶快试试看吧!
关于Python学习指南
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!
👉Python所有方向的学习路线👈
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)
👉Python学习视频600合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python70个实战练手案例&源码👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉Python大厂面试资料👈
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
👉Python副业兼职路线&方法👈
学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。
👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费
】
![](https://i-blog.csdnimg.cn/blog_migrate/8bbab146a2aa467d1c3a5c71767d1d1d.png)