python爬取岗位数据并分析_爬虫+python(一)分析北京数据分析岗位现状

a015bb2a36fd39c0feb9f61c9ffcd43d.png

Serborn直方图,Serborn圆饼图,Serborn条形图, 福利待遇词云图,正则的使用:

pattern = 'd+'  
df['work_year'] = df['工作年限'].str.findall(pattern)
# 数据处理后的工作年限
avg_work_year = []
# 工作年限
for i in df['work_year']:
   # 如果工作经验为'不限'或'应届毕业生',那么匹配值为空,工作年限为0  
   if len(i) == 0:  
       avg_work_year.append(0)  
   # 如果匹配值为一个数值,那么返回该数值  
   elif len(i) == 1:  
       avg_work_year.append(int(''.join(i)))  
   # 如果匹配值为一个区间,那么取平均值  
   else:  
       num_list = [int(j) for j in i]  
       avg_year = sum(num_list)/2  
       avg_work_year.append(avg_year)
df['工作经验'] = avg_work_year
一,爬取拉勾网北京数据分析岗位数据
二,导入模块.读取数据,处理工作年限字段及月工资字段
三,x=月工资数,y= 数据分析岗位数 Serborn直方图
四,x=工作地点各区占比 Serborn圆饼图
五,x=招聘人数,y=最低学历要求 Serborn条形图
六,x=招聘人数,y=工作年限 Serborn条形图
七,x=待遇 福利待遇词云图
八,导出LV0及LV1的帝都数据分析岗位工资Excel

一,爬取拉勾网北京数据分析岗位数据

import json
import requests
import csv
import time


def get_json(url, datas):
    my_headers = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36",
        "Referer": "https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?labelWords=&fromSearch=true&suginput=",
        "Content-Type": "application/x-www-form-urlencoded;charset = UTF-8"
    }
    time.sleep(10)
    ses = requests.session()  # 获取session
    ses.headers.update(my_headers)  # 更新
    ses.get(
        "https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?labelWords=&fromSearch=true&suginput=")
    content = ses.post(url=url, data=datas)
    result = content.json()
    info = result['content']['positionResult']['result']
    info_list = []
    for job in info:
        information = []
        information.append(job['positionId'])  # 岗位对应ID
        information.append(job['city'])  # 岗位对应城市
        information.append(job['companyFullName'])  # 公司全名
        information.append(job['companyLabelList'])  # 福利待遇
        information.append(job['district'])  # 工作地点
        information.append(job['education'])  # 学历要求
        information.append(job['firstType'])  # 工作类型
        information.append(job['formatCreateTime'])  # 发布时间
        information.append(job['positionName'])  # 职位名称
        information.append(job['salary'])  # 薪资
        information.append(job['workYear'])  # 工作年限
        info_list.append(information)

    return info_list


def main():
    page = int(input('请输入你要抓取的页码总数:'))

    title = ['岗位id', '城市', '公司全名', '福利待遇', '工作地点', '学历要求', '工作类型', '发布时间', '职位名称', '薪资', '工作年限']
    file = open('lagou.csv', 'w', newline='', encoding='utf-8')
    writer = csv.writer(file)
    writer.writerow(title)

    for x in range(1, page + 1):
        url = 'https://www.lagou.com/jobs/positionAjax.json?city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false'
        datas = {
            'first': 'false',
            'pn': x,
            'kd': '数据分析',
        }
        try:
            infos = get_json(url, datas)
            for info in infos:
                writer.writerow(info)
            print("第%s页正常采集" % x)
        except Exception as msg:
            print("第%s页出现问题" % x)
            time.sleep(10)
            infos = get_json(url=url, datas=datas)
            for info in infos:
                writer.writerow(info)

if __name__ == '__main__':
    main()

二,导入模块.读取数据,处理工作年限字段及月工资字段

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

import warnings
warnings.filterwarnings('ignore') 
# 不发出警告
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文显示问题-设置字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题


import jieba
from wordcloud import WordCloud
from scipy.misc import imread,imresize

import os
os.chdir('C:/Users/Administrator/Desktop/帝都python数据分析/')
# 创建工作路径
#读取数据
df01 = pd.read_csv('lagou.csv',encoding = 'utf-8')
df = df01.copy()
#df.drop(df[df['职位名称'].str.contains('实习')].index, inplace=True) 

 
#print(df.describe())
# 由于CSV文件内的数据是字符串形式,先用正则表达式将字符串转化为列表,再取区间的均值  
pattern = 'd+'  
df['work_year'] = df['工作年限'].str.findall(pattern)
# 数据处理后的工作年限
avg_work_year = []
# 工作年限
for i in df['work_year']:
   # 如果工作经验为'不限'或'应届毕业生',那么匹配值为空,工作年限为0  
   if len(i) == 0:  
       avg_work_year.append(0)  
   # 如果匹配值为一个数值,那么返回该数值  
   elif len(i) == 1:  
       avg_work_year.append(int(''.join(i)))  
   # 如果匹配值为一个区间,那么取平均值  
   else:  
       num_list = [int(j) for j in i]  
       avg_year = sum(num_list)/2  
       avg_work_year.append(avg_year)
df['工作经验'] = avg_work_year

# 将字符串转化为列表,再取区间的前25%,比较贴近现实  
df['salary'] = df['薪资'].str.findall(pattern)
# 月薪
avg_salary = []  
for k in df['salary']:  
   int_list = [int(n) for n in k]  
   avg_wage = int_list[0]+(int_list[1]-int_list[0])/4  
   avg_salary.append(avg_wage)
df['月工资'] = avg_salary

# 将学历不限的职位要求认定为最低学历:大专
df['学历要求'] = df['学历要求'].replace('不限','大专')

029e78d0958f91d7bfe6daac2c91b65a.png

三,x=月工资数,y= 数据分析岗位数 Serborn直方图

sns.set()
sns.set_style("ticks")
plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文字体设置-黑体
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
sns.set(font='SimHei')  # 解决Seaborn中文显示问题



#####薪资直方图
sns.distplot(df['月工资'],bins = 10,hist = True,kde = False,norm_hist=False,
            rug = True,vertical = False,
            color = 'blue',label = '2019年8月北京市数据分析薪资',axlabel = '工资 (千元)')
plt.savefig('2019年8月北京市数据分析薪资.jpg', dpi=200) 
plt.legend()

a9d09f3f93e02a460be702a4c99c4f1d.png

结论:2019年8月北京市数据分析薪资大部分处于14~19k之间

四,x=工作地点各区占比 Serborn圆饼图

import matplotlib.font_manager as fm
my_font = fm.FontProperties(fname="C:windowsFontsSTZHONGS.TTF")
count = df['工作地点'].value_counts()[:8]
#count = count.loc[['朝阳区', '昌平区', '东城区', '大兴区', '西城区', '海淀区', '石景山区', '通州区', '延庆区']]  # 调整顺序
plt.figure(figsize=(10,10))
plt.pie(count, 
        labels = count.keys(),
        labeldistance=1.05,
        autopct='%2.2f%%',
        pctdistance=0.6,
        radius=1.5,
        startangle=150,
        textprops= {'fontsize':50,'color':'black','fontproperties':my_font}
        )  
plt.axis('equal')  # 使饼图为正圆形  
#plt.legend(loc='upper left', bbox_to_anchor=(-0.1,1))
plt.title("2019年8月北京市各区数据分析岗位占比")  
plt.savefig('2019年8月北京市各区数据分析岗位占比.jpg', dpi=200)  
plt.show()  

853b379df6120e0699658075662b53d6.png

五,x=招聘人数,y=最低学历要求 Serborn条形图

dfxlyq = df['学历要求'].value_counts()
dfxlyq = pd.DataFrame(dfxlyq)
dfxlyq = dfxlyq.reset_index()
dfxlyq.columns = ['最低要求学历','招聘人数']
sns.barplot(x="招聘人数", y="最低要求学历", data=dfxlyq,
            palette = 'Blues',edgecolor = 'w')
plt.savefig('2019年8月北京市数据分析学历要求.jpg', dpi=200)  

63004f12b0de552d9269ab3172a4f5c0.png

六,x=招聘人数,y=工作年限 Serborn条形图

#######工作年限要求直方图
sns.set_context("paper")
dfgznx = df['工作年限'].value_counts()
dfgznx = pd.DataFrame(dfgznx)
dfgznx = dfgznx.reset_index()
dfgznx.columns = ['工作年限','招聘人数']
sns.barplot(x="招聘人数", y="工作年限", data=dfgznx,
            palette = 'GnBu_r',edgecolor = 'w')
plt.savefig('2019年8月北京市数据分析工作年限要求.jpg', dpi=200)  
######青春饭,扁平化,就是干活的,看命运了!

9004d948841f0992bd036954d32b95b2.png

七,x=待遇 福利待遇词云图

#######福利待遇词云图
# 绘制词云,将职位福利中的字符串汇总  
text = ''  
for line in df['福利待遇']:  
   text += line  
# 使用jieba模块将字符串分割为单词列表
cut_text = ' '.join(jieba.cut(text))

color_mask = imread('C:/Users/Administrator/Desktop/cloud.jpg')  #设置背景图
cloud = WordCloud(
    background_color = 'white',
    # 对中文操作必须指明字体
    font_path='C:windowsFontsSTZHONGS.TTF',
    mask = color_mask,
    max_words = 50,
    max_font_size = 200
    ).generate(cut_text)

# 保存词云图片
cloud.to_file('word_cloud.jpg')
plt.imshow(cloud)
plt.axis('off')
plt.show()

c329835cc841dd173e15c010cc589243.png

八,导出LV0及LV1的帝都数据分析岗位工资Excel

ssss = df[df['学历要求']!='硕士'][df['工作经验']<2][df['月工资']<17]
ssss.drop(ssss[ssss['工作年限'].str.contains('应届毕业生')].index, inplace=True) 
ssss.sort_values(by = '月工资',inplace = True,ascending=False)
ssss.reset_index(inplace=True)
del ssss['index']
ssss.to_excel('C:/Users/Administrator/Desktop/lv0shujufenxi.xlsx')



vvvv = df[df['学历要求']!='硕士'][df['工作经验']<=2][df['月工资']<20]
vvvv.drop(vvvv[vvvv['工作年限'].str.contains('应届毕业生')].index, inplace=True) 
vvvv.sort_values(by = '月工资',inplace = True,ascending=False)
vvvv.reset_index(inplace=True)
del vvvv['index']
vvvv.to_excel('C:/Users/Administrator/Desktop/lv1shujufenxi.xlsx')

d466b5ccd62f5208826f6d493e7b51a3.png
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值