The best time to plant a tree was 10 years ago,the second best time is now.

种一棵树最好的时间是十年前,其次是现在。

利用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 random

import 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 collections

from 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',  # 设置背景颜色  默认是black

width=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) 查看招聘岗位的职位福利,词云展示。

代码与上文一致

运行效果如下:

职位福利关键词中出现频率较高的有五险一金、年终奖金、绩效奖金、定期体检、餐饮补贴等。

源码&数据下载

https://alltodata.cowtransfer.com/s/b1c87350fd8a47

python爬取前程无忧_用python爬取前程无忧网,看看我们是否真的“前程无忧”?...相关推荐

  1. python爬房源信息_用python爬取链家网的二手房信息

    题外话:这几天用python做题,算是有头有尾地完成了.这两天会抽空把我的思路和方法,还有代码贴出来,供python的初学者参考.我python的实战经历不多,所以代码也是简单易懂的那种.当然过程中还 ...

  2. python自动排课表_利用python爬取广西科技大学教务管理信息系统班级课表

    操作环境 python 3.6.1 pycharm 5.0.3 WampServer 3.0.6 windows 8(64位) 特点 1.中途退出程序或者断网之后重连再次运行不会抓取到重复的课程表 2 ...

  3. python视频网站分类_用Python爬取b站视频

    本文概要 爬取B站视频的办法在csdn和B站有很多 但是本文算作是对爬取步骤的一个拆解 同时也算是我的笔记.本代码的参考对象是https://blog.csdn.net/Mr_Ohahah/artic ...

  4. python爬取数据分析_使用Python爬取社交网络数据分析

    在线社交网站为人们提供了一个构建社会关系网络和互动的平台.每一个人和组织都可以通过社交网站互动.获取信息并发出自己的声音,因而吸引了众多的使用者.作为一个复杂的社会系统,在线社交网站真实地记录了社会网 ...

  5. python唯美壁纸_用python爬虫爬取网页壁纸图片(彼岸桌面网唯美图片)

    参考文章:https://www..com/franklv/p/6829387.html 今天想给我的电脑里面多加点壁纸,但是嫌弃一个个保存太慢,于是想着写个爬虫直接批量爬取,因为爬虫只是很久之前学过 ...

  6. python b站 礼物_用Python爬取并分析了B站最热排行榜,我发现了这些秘密

    现在大家的生活中,已经越来越离不开B站了,2020年的第一季度,B站月活跃用户达到了1.72亿,日活跃用户也已经突破了5000万个用户.源源不断的流量让B站的up主们也是粉丝数目不断暴涨,百万粉丝的u ...

  7. 用python爬虫下载视频_使用Python编写简单网络爬虫抓取视频下载资源

    我第一次接触爬虫这东西是在今年的5月份,当时写了一个博客搜索引擎,所用到的爬虫也挺智能的,起码比电影来了这个站用到的爬虫水平高多了! 回到用Python写爬虫的话题. Python一直是我主要使用的脚 ...

  8. python新闻关键词次数_使用python抓取百度搜索、百度新闻搜索的关键词个数

    由于实验的要求,需要统计一系列的字符串通过百度搜索得到的关键词个数,于是使用python写了一个相关的脚本. 在写这个脚本的过程中遇到了很多的问题,下面会一一道来. ps:我并没有系统地学习过pyth ...

  9. python 人数取整_避免PYTHON取整四舍六入五成双问题

    python中关于round函数的小坑 - _小苹果 - 博客园​www.cnblogs.com 同样的坑:整数a/100 不等于a×0.01 在python2.7的doc中,round()的最后写着 ...

  10. python beautifulsoup抓取网页内容_利用Python和Beautiful Soup抓取网页内容

    利用Python和Beautiful Soup抓取网页内容 Posted on 2012-08-09 00:08 SamWei 阅读(381) 评论(1) 编辑 收藏 Python 3中提供了url打 ...

最新文章

  1. mac通过tree源码编译安装tree
  2. 影响生产计划制定的因素_石料生产线选砂石原骨料时的技巧及影响破碎的因素...
  3. linux关机命令详解
  4. 程序编译出错,缺少类型说明符;语法错误 : 缺少“;”(在标识符“PVOID64”的前面)
  5. 微服务架构·基础篇,傻瓜看了都会
  6. 【数据竞赛】这篇文章送给想要学习特征交叉的朋友。
  7. 博士申请 | 加拿大Mila实验室唐建教授招收深度学习方向博士生和实习生
  8. linux 命令 考试,linux常用命令总结-第一次考试
  9. 工龄是怎么计算的?几个月算工龄吗?
  10. Divide and conquer method
  11. nvm 下载node 下载不下来_挑战不可能最新版手游下载_挑战不可能最新版安卓版下载...
  12. 转:集群、分布式、负载均衡区别与联系
  13. Python使用matplotlib可视化模拟龟兔赛跑折线图
  14. Vue中如何解决跨域问题
  15. 企业微信和个人微信的区别是什么?
  16. mysql空洞,mysql crud造成数据空洞的原因
  17. 利用ffmpeg将m3u8下载成mp4(利用ps1脚本解析json批量下载)
  18. Ubuntu移除PDF密码
  19. 数据结构实验二:7-2 两个有序链表序列的合并
  20. GEEer成长日记十三:Landsat_SR计算地表温度时间序列

热门文章

  1. 实习笔记:空间分析+地形分析+水文分析
  2. Linux secure 日志分析
  3. 安装CP2102驱动2021
  4. 武汉学员,我们和传智播客boss在一起
  5. 7tpro android11,一加7/7Pro/7T/Pro等机型安卓11底层氢OS11刷机包推送-支持root
  6. 计算机课教学软件,计算机实用工具软件课程的的特点及教学的方法.doc
  7. Linux十大桌面环境
  8. 我国土地资源开发利用中存在的主要问题
  9. QT 触摸屏下滑滚动
  10. Python破解WIFI升级版保姆级教程,多线程破解+界面(附赠密码本)