爬取前程无忧python招聘数据,看我们是否真的“前程无忧”
前言
利用python爬取在前程无忧网搜索python关键字出现的最新的招聘数据,保存到本地Excel,进行数据查看和预处理,然后利用matplotlib进行数据分析和可视化。
1. 爬取数据
目标url:
https://www.51job.com/
在前程无忧网输入关键字python,搜索有关的岗位数据。翻页查看这些招聘岗位信息,可以发现url翻页的规律。
检查网页源代码,可以找到想要提取的数据。
部分爬虫代码如下,完整见文末下载
async def parse(self, text):# 正则匹配提取数据 try:job_name = re.findall('"job_name":"(.*?)",', text) # 职位company_name = re.findall('"company_name":"(.*?)",', text) # 公司名称salary = re.findall('"providesalary_text":"(.*?)",', text)salary = [i.replace('\\', '') for i in salary] # 薪酬 去掉 \ 符号city = re.findall('"workarea_text":"(.*?)",', text) # 城市job_welfare = re.findall('"jobwelf":"(.*?)",', text) # 职位福利attribute_text = re.findall('"attribute_text":(.*?),"companysize_text"', text)attribute_text = ['|'.join(eval(i)) for i in attribute_text]companysize = re.findall('"companysize_text":"(.*?)",', text) # 公司规模category = re.findall('"companyind_text":"(.*?)",', text)category = [i.replace('\\', '') for i in category] # 公司所属行业 去掉 \ 符号datas = pd.DataFrame({'company_name': company_name, 'job_name': job_name, 'companysize': companysize, 'city': city, 'salary': salary, 'attribute_text': attribute_text, 'category': category, 'job_welfare': job_welfare})datas.to_csv('job_info.csv', mode='a+', index=False, header=True)logging.info({'company_name': company_name, 'job_name': job_name, 'company_size': companysize, 'city': city, 'salary': salary, 'attribute_text': attribute_text, 'category': category, 'job_welfare': job_welfare})except Exception as e:print(e)
运行效果如下:
爬取了200页的招聘数据,共10000条招聘信息,用时49.919s。
2. 数据查看和预处理
import pandas as pd
df = pd.read_csv('job_info.csv')
# 异步爬虫爬取数据时 datas.to_csv('job_info.csv', mode='a+', index=False, header=True) 删除多的列名
df1 = df[df['salary'] != 'salary']
# 查看前10行
df1.head(10)
# city那一列数据 处理为城市
# 按 - 分割 expand=True 0那一列重新赋值给df['city']
df1['city'] = df1['city'].str.split('-', expand=True)[0]
df1.head(10)
# 经验要求 学历要求 有的话是在attribute_text列里
df['attribute_text'].str.split('|', expand=True)
df1['experience'] = df1['attribute_text'].str.split('|', expand=True)[1]
df1['education'] = df1['attribute_text'].str.split('|', expand=True)[2]
df1
保存为已清洗数据
df1.to_csv('已清洗数据.csv', index=False)
查看索引、数据类型和内存信息
df2 = pd.read_csv('已清洗数据.csv')
df2.info()
3. 数据分析与可视化
(1) 柱形图展示招聘岗位数最多的城市Top10
代码如下:
import pandas as pd
import randomimport matplotlib.pyplot as plt
import matplotlib as mpl
df = pd.read_csv('已清洗数据.csv')
# 有些是异地招聘 过滤掉data = df[df['city'] != '异地招聘']['city'].value_counts()
city = list(data.index)[:10] # 城市
nums = list(data.values)[:10] # 岗位数
print(city)print(nums)colors = ['#FF0000', '#0000CD', '#00BFFF', '#008000', '#FF1493', '#FFD700', '#FF4500', '#00FA9A', '#191970', '#9932CC']
random.shuffle(colors)# 设置大小 像素plt.figure(figsize=(9, 6), dpi=100)
# 设置中文显示mpl.rcParams['font.family'] = 'SimHei'
# 绘制柱形图 设置柱条的宽度和颜色# color参数 每根柱条配置不同颜色plt.bar(city, nums, width=0.5, color=colors)
# 添加描述信息plt.title('招聘岗位数最多的城市Top10', fontsize=16)
plt.xlabel('城市', fontsize=12)
plt.ylabel('岗位数', fontsize=12)
# 展示图片plt.show()
运行效果如下:
['上海', '深圳', '广州', '北京', '杭州', '成都', '武汉', '南京', '苏州', '长沙']
[2015, 1359, 999, 674, 550, 466, 457, 444, 320, 211]
上海、深圳、广州、北京提供了很多岗位,杭州、成都、武汉、南京等城市的招聘岗位数量也比较可观。
(2) 计算岗位数据的薪酬,处理为多少K/月,划分薪酬区间,统计薪酬分布情况,饼图展示。
代码如下:
# 设置中文显示
mpl.rcParams['font.family'] = 'SimHei'
# 设置大小 像素plt.figure(figsize=(9, 6), dpi=100)
plt.axes(aspect='equal') # 保证饼图是个正圆
explodes = [0, 0, 0, 0.1, 0.2, 0.3, 0.4, 0.5]
plt.pie(nums, pctdistance=0.75, shadow=True,colors=colors, autopct='%.2f%%', explode=explodes,startangle=15, labeldistance=1.1,)# 设置图例 调节图例位置plt.legend(part_interval, bbox_to_anchor=(1.0, 1.0))
plt.title('招聘岗位的薪酬分布', fontsize=15)
plt.show()
运行效果如下:
招聘岗位给的薪酬在5K-10K和10K-15K区间所占的比例较大,也有一定比例的50K以上的高薪资岗位。
(3) 查看招聘岗位对学历的要求的情况,水平柱形图可视化。
mport pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
df = pd.read_csv(r'已清洗数据.csv')['education']
data = df.value_counts()labels = ['大专', '本科', '硕士', '博士']
nums = [data[i] for i in labels]
print(labels)print(nums)colors = ['cyan', 'red', 'yellow', 'blue']
# 设置中文显示
mpl.rcParams['font.family'] = 'SimHei'
# 设置显示风格
plt.style.use('ggplot')
# 设置大小 像素
plt.figure(figsize=(8, 6), dpi=100)
# 绘制水平柱状图
plt.barh(labels, nums, height=0.36, color=colors)
plt.title('招聘岗位对学历的要求', fontsize=16)
plt.xlabel('岗位数量', fontsize=12)
plt.show()
运行效果如下:
['大专', '本科', '硕士', '博士']
[2052, 6513, 761, 45]
(4) 查看招聘岗位对工作经验的要求的情况,水平柱形图可视化。
由于得到的工作经验列里的数据并不规范,统计时需做特殊处理
代码如下:
# 设置中文显示
mpl.rcParams['font.family'] = 'SimHei'
# 设置显示风格plt.style.use('ggplot')
# 设置大小 像素plt.figure(figsize=(9, 6), dpi=100)
# 绘制水平柱状图plt.barh(labels, nums, height=0.5, color=colors)
plt.title('招聘岗位对工作经验的要求', fontsize=16)
plt.xlabel('岗位数量', fontsize=12)
plt.show()
运行效果如下:
3-4年经验 3361
2年经验 2114
1年经验 1471
5-7年经验 1338
在校生\/应届生 661
无需经验 417
本科 182
8-9年经验 105
10年以上经验 64
硕士 59
招1人 57
招若干人 57
招2人 42
大专 30
招3人 14
博士 11
招5人 9
招4人 5
招10人 2
招7人 1
Name: experience, dtype: int64
['无需经验', '1年经验', '2年经验', '3-4年经验', '5-7年经验', '8-9年经验', '10年以上经验']
[1260, 1530, 2114, 3372, 1338, 105, 64]
【】#### (5) 查看招聘公司所属行业的分布情况,词云展示。
代码如下:
import pandas as pd
import collectionsfrom wordcloud import WordCloud
import matplotlib.pyplot as plt
df = pd.read_csv(r'已清洗数据.csv')['category']
data = list(df.values)word_list = []for i in data:x = i.split('/')for j in x:word_list.append(j)word_counts = collections.Counter(word_list)# 绘制词云
my_cloud = WordCloud(background_color='white', # 设置背景颜色 默认是blackwidth=900, height=500,font_path='simhei.ttf', # 设置字体 显示中文max_font_size=120, # 设置字体最大值min_font_size=15, # 设置子图最小值random_state=60 # 设置随机生成状态,即多少种配色方案
).generate_from_frequencies(word_counts)
# 显示生成的词云图片
plt.imshow(my_cloud, interpolation='bilinear')
# 显示设置词云图中无坐标轴
plt.axis('off')
plt.show()
运行效果如下:
(6) 查看招聘岗位的职位福利,词云展示。
代码与上文一致
运行效果如下:
职位福利关键词中出现频率较高的有五险一金、年终奖金、绩效奖金、定期体检、餐饮补贴等。
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。
旧时晚风拂晓城 | 作者
凹凸数据 | 来源
爬取前程无忧python招聘数据,看我们是否真的“前程无忧”相关推荐
- 深圳python数据分析师招聘_Python爬取智联招聘数据分析师岗位相关信息的方法
Python爬取智联招聘数据分析师岗位相关信息的方法 发布时间:2020-09-23 23:23:12 来源:脚本之家 阅读:88 进入智联招聘官网,在搜索界面输入'数据分析师',界面跳转,按F12查 ...
- python爬斗鱼直播数据图片_Python爬取2000万直播数据——看20万游戏主播能否月入100万...
原标题:Python爬取2000万直播数据--看20万游戏主播能否月入100万 她那时候还太年轻,不知道命运赠送的礼物,早已暗中标好了价格. --茨威格 社会在发展,时代在进步.伴随着未曾停息的拥护声 ...
- BeautifulSoup爬取智联招聘数据
BeautifulSoup爬取智联招聘数据 警告: 此项技术仅适用于练习,限制大量大规模爬取,在爬取中使用了个人cookie,请注意不要随意泄露,内含个人隐私信息! 如果过分爬取,会造成ip被封! 1 ...
- python 爬取拉钩招聘数据
上一篇介绍在linux 搭建jupter lab,本文将介绍python数据接口的爬取以及提取建模分析的数据 导入依赖的包 import requests import time from urlli ...
- python爬虫实例之爬取智联招聘数据
这是作者的处女作,轻点喷.... 实习在公司时领导要求学习python,python的爬虫作为入门来说是十分友好的,话不多说,开始进入正题. 主要是爬去智联的岗位信息进行对比分析出java和pytho ...
- python爬斗鱼直播_Python爬取2000万直播数据——看20万游戏主播能否月入100万
作者 | 朱小五and王小九来源 | 凹凸数读 她那时候还太年轻,不知道命运赠送的礼物,早已暗中标好了价格. --茨威格 社会在发展,时代在进步.伴随着未曾停息的拥护声和反对声,电竞行业逐渐被接受,被 ...
- 利用python做一个游戏主播_Python爬取2000万直播数据——看20万游戏主播能否月入100万...
作者 | 朱小五and王小九 来源 | 凹凸数读 她那时候还太年轻,不知道命运赠送的礼物,早已暗中标好了价格. --茨威格 社会在发展,时代在进步.伴随着未曾停息的拥护声和反对声,电竞行业逐渐被接受, ...
- 利用Crawlspider爬取腾讯招聘数据(全站,深度)
需求: 使用crawlSpider(全站)进行数据爬取 - 首页: 岗位名称,岗位类别 - 详情页:岗位职责 - 持久化存储 代码: 爬虫文件: from scrapy.linkextractors ...
- 实战案例 | Scrapy 集成Selenium爬取智联招聘数据
人生苦短,快学Python! 初学scrapy之后,发现就是效率对比于selenium和requests快了很多,那么问题来了,如果网站设置了反爬,比如User-Agent反爬,cookie反爬,IP ...
最新文章
- SQL SERVER 2012 第三章 使用INSERT语句添加数据
- 理解Flex itemRenderer(5)--效率
- 雷神开机logo更改_九代酷睿i9加持的性能怪兽 雷神911黑武士Ⅱ评测
- Java项目转变为Java Web项目
- python 爬取上海体育彩票文章标题、时间、内容
- metamask插件_Remix+metamask+myetherwallet+Ciper 完成主网发币(实战 十)
- Hibernate原生SQL查询
- FFMpeg编译支持NVidia CODEC(成功)
- pythoncss50使用教程_Python学习(二十) —— 前端之CSS
- matlab索引超出数组边界且不提示数组边界的一种处理办法
- SHU 购买装备 贪心+二分
- 安卓游戏开发一(超级玛丽)
- 粒子群算法python实现: 带活化因子
- 请编写函数实现自然底数 e=2.718281828
- 苹果和虫子c语言编程题,虫子吃苹果:每天10分钟,锻炼少儿编程计算思维
- Qt5 QML TreeView currentIndex当前选中项的一些问题
- Java中String与Byte之间的各种转换
- Unity3D的Json篇:LitJson.dll插件
- docker images 导入导出
- 汇编语言:简单图形界面的绘制教程
热门文章
- Picture Colorizer Pro v3.1.0 黑白照片AI一键上色软件
- java controller 继承_java – Spring RestController中的继承
- VRWERX将打造《碟中谍》系列VR游戏,让你与阿汤哥一起战斗和冒险
- 英语句子成分分析(三)-- 主语+谓语+宾语(somebody)+宾语(something)
- ios Flipper Thread 10: EXC_BAD_ACCESS (code=1, address=0x10001)
- 爬虫必备技术之解析Html工具库
- R语言 对于医学随访数据的处理 取同个id第一次随访日期和最后一次随访日期
- 适合程序员、办公人员的实用工具
- Android拍照或从相册中取照片
- VLOOKUP返回N/A的一种原因