爬虫+数据可视化分析

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、前程无忧数据分析岗位爬虫

利用selenium+Xpath对前程无忧网站数据分析岗位的名称、公司、薪资、地址进行爬虫,具体代码如下:

from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
import time
from selenium.webdriver.chrome.options import Options
import pandas as pd
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
locator=(By.TAG_NAME,'span.jname.at')
result={
    '岗位名称':[],
        '公司':[],
        '薪资':[],
        '地址':[]
}
opt=Options() #无头浏览器配置
opt.add_argument("--headless")
opt.add_argument("--disable-gpu")
opt.add_argument("--disable-blink-features=AutomationControlled")
opt.add_argument('User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36')

web=Chrome(options=opt)
for j in range(51):
    web.get(f"https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE%25E5%2588%2586%25E6%259E%2590,2,{j}.html")
    time.sleep(1)
    li_list=web.find_elements_by_xpath('/html/body/div[2]/div[3]/div/div[2]/div[4]/div[1]/div')
    for a in li_list:
        WebDriverWait(web,5).until(EC.presence_of_element_located(locator))
        a.find_element_by_tag_name('p.t').click()
        job_name=a.find_element_by_tag_name('span.jname.at').text
        company=a.find_element_by_tag_name('a.cname.at').text
        salary=a.find_element_by_tag_name('span.sal').text
        location=a.find_element_by_tag_name('span.d.at').text
        result["岗位名称"].append(job_name)
        result["公司"].append(company)
        result["薪资"].append(salary)
        result["地址"].append(location)
        df = pd.DataFrame(result)
        df.to_csv("51job.csv", encoding='gbk',index=False)
print("完成!!!!")

二、Python 数据清洗+可视化分析

1.数据清洗

import numpy as np
import pandas as pd
data=pd.read_csv('ohmygod.csv',encoding='gbk') #导入数据
new=data['地址'].str.split('|',expand=True)
new_names=['地区','工作经验','学历']
new.columns=new_names
d1=data.join(new)
def get_salary(sal):
    salary=0
    if sal.endswith('万/月'):
        sal=sal.replace("万/月","")
        if "-" in sal:
            min=sal.split("-")[0]
            max=sal.split("-")[1]
            salary=int((float(min)+float(max))/2*10000)
    if sal.endswith('千/月'):
        sal=sal.replace("千/月","")
        if "-" in sal:
            min=sal.split("-")[0]
            max=sal.split("-")[1]
            salary=int((float(min)+float(max))/2*1000)
    if sal.endswith('万/年'):
        sal=sal.replace("万/年","")
        if "-"in sal:
            min=sal.split("-")[0]
            max=sal.split("-")[1]
            salary=int((float(min)+float(max))/2*10000/12)
    if sal.endswith("元/天"):
        sal=sal.replace("元/天","")
        salary=int(sal)*22
    return salary
d1['薪资s']=d1['薪资'].map(get_salary) #切割字符换算单位
bins=[0,4000,6000,8000,10000,80000]
labels=['4千及以下','4-6千','6-8千','8千-1万','1万以上']
d1['薪资区间']=pd.cut(d1['薪资s'],bins=bins,labels=labels) #对薪资进行分箱
a=d1['地区'].str.split('-',expand=True)
new_names=['省市','区']
a.columns=new_names
d1=d1.join(a) #字符分割提取城市
d1.rename(index=None,columns={'公司':'company','省市':'city','薪资s':'salary'},inplace=True)

2. 数据可视化分析

首先对全国数据分析岗位地区需求进行了解,如下图:

呈右偏分布,主要集中在北上广深,其次南方沿海城市;

不同学历、不同的工作经验的岗位需求量的占比:

在这里插入图片描述
在学历方面,要求是本科生的最多,占比为61.8%;其次是大专,占比为31.8%;在工作经验方面,1-4年经验各占比25%左右,其次是零经验和5-7年经验;

然后了解各城市的平均薪资:
在这里插入图片描述
按照平均薪资排名前25的城市的平均薪资均在10k+;

分别观察学历、工作经验与薪资的关系:
在这里插入图片描述
在这里插入图片描述
学历、工作经验都与薪资呈正相关。学历最高博士的平均月薪为30k+,最低学历中专的平均月薪为5k+;10年以上工作经验的平均月薪为35k+;无经验以及1年工作经验的平均月薪为8k+;


结论

1.若想从事数据分析工作,且接受异地的工作,首选上海、广州、深圳,这些地区数据分析岗位需求量是其他城市的3-5倍;其次是北京、杭州、武汉;
2.大部分工作要求本科、大专学历,对学历并没有十分严格的要求,但是90%岗位要求有相关经验,可见数据分析岗位看重的不是学历,而是经验,要有一定的业务sense,具有较强逻辑思维能力;
3.薪资与地区的需求量并不是呈正比的,但是与学历、工作经验是呈正相关的,学历高、具有工作经验的不一定要在北上广深,也可以在自己熟悉的城市;
4.学历为中专的全国平均月薪为5k+;无工作经验的全国平均月薪为8k+;可以以此作为自己找工作时的薪资参考;

  • 9
    点赞
  • 149
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值