会Python薪资可达50K!爬虫实战看看我们真的”前程无忧”吗?

挖数网精选
挖数网精选
挖数网精选
446
文章
0
评论
2020-09-0513:09:00 评论 1,164 5086字
摘要

利用python爬取在前程无忧网搜索python关键字出现的最新的招聘数据,保存到本地Excel,进行数据查看和预处理,然后利用matplotlib进行数据分析和可视化。

一.爬取数据

目标url:https://www.51job.com/

在前程无忧网输入关键字python,搜索有关的岗位数据。翻页查看这些招聘岗位信息,可以发现url翻页的规律。

检查网页源代码,可以找到想要提取的数据。

会Python薪资可达50K!爬虫实战看看我们真的

部分爬虫代码如下,完整见文末获取:

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)

运行效果如下:

会Python薪资可达50K!爬虫实战看看我们真的

会Python薪资可达50K!爬虫实战看看我们真的

爬取了200页的招聘数据,共10000条招聘信息,用时49.919s。

二.数据查看和预处理

import pandas as pddf = 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)

会Python薪资可达50K!爬虫实战看看我们真的

# city那一列数据 处理为城市# 按 - 分割 expand=True 0那一列重新赋值给df["city"]df1["city"] = df1["city"].str.split("-", expand=True)[0]df1.head(10)

会Python薪资可达50K!爬虫实战看看我们真的

# 经验要求 学历要求 有的话是在attribute_text列里df["attribute_text"].str.split("|", expand=True)

会Python薪资可达50K!爬虫实战看看我们真的

df1["experience"] = df1["attribute_text"].str.split("|", expand=True)[1]df1["education"] = df1["attribute_text"].str.split("|", expand=True)[2]df1

会Python薪资可达50K!爬虫实战看看我们真的

保存为已清洗数据

df1.to_csv("已清洗数据.csv", index=False)

查看索引、数据类型和内存信息

df2 = pd.read_csv("已清洗数据.csv")df2.info()

会Python薪资可达50K!爬虫实战看看我们真的

三.数据分析与可视化

1. 柱形图展示招聘岗位数最多的城市Top10

代码如下:

import pandas as pdimport randomimport matplotlib.pyplot as pltimport matplotlib as mpldf = 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]

会Python薪资可达50K!爬虫实战看看我们真的

上海、深圳、广州、北京提供了很多岗位,杭州、成都、武汉、南京等城市的招聘岗位数量也比较可观。

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()

运行效果如下:

会Python薪资可达50K!爬虫实战看看我们真的

招聘岗位给的薪酬在5K-10K和10K-15K区间所占的比例较大,也有一定比例的50K以上的高薪资岗位。

3. 查看招聘岗位对学历的要求的情况,水平柱形图可视化

mport pandas as pdimport matplotlib.pyplot as pltimport matplotlib as mpldf = 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]

会Python薪资可达50K!爬虫实战看看我们真的

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年经验 33612年经验 21141年经验 14715-7年经验 1338在校生/应届生 661无需经验 417本科 1828-9年经验 10510年以上经验 64硕士 59招1人 57招若干人 57招2人 42大专 30招3人 14博士 11招5人 9招4人 5招10人 2招7人 1Name: experience, dtype: int64["无需经验", "1年经验", "2年经验", "3-4年经验", "5-7年经验", "8-9年经验", "10年以上经验"][1260, 1530, 2114, 3372, 1338, 105, 64]

会Python薪资可达50K!爬虫实战看看我们真的

5. 查看招聘公司所属行业的分布情况,词云展示

代码如下:

import pandas as pdimport collectionsfrom wordcloud import WordCloudimport matplotlib.pyplot as pltdf = 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()

运行效果如下:

会Python薪资可达50K!爬虫实战看看我们真的

6. 查看招聘岗位的职位福利,词云展示

代码与上文一致

运行效果如下:

会Python薪资可达50K!爬虫实战看看我们真的

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

END.作者:旧时晚风拂晓城来源:凹凸数据本文为转载分享,如侵权请联系后台删除

  • 我的微信公众号
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: