python爬虫:爬取拉勾网职位并分析,目前最稳定和高效的UI适配方案

‘X-Anit-Forge-Token’: ‘None’,

‘X-Requested-With’:‘XMLHttpRequest’

}

my_data = {

‘first’: ‘true’,

‘pn’:num,

‘kd’:‘数据分析’}

res = requests.post(url, headers = my_headers, data = my_data)

res.raise_for_status()

res.encoding = ‘utf-8’

得到包含职位信息的字典

page = res.json()

return page

在搜索结果的第一页,我们可以从JSON里读取总职位数,按照每页15个职位,获得要爬取的页数。再使用循环按页爬取,将职位信息汇总,输出为CSV格式。

程序运行如图:

在这里插入图片描述

抓取结果如图:

在这里插入图片描述

3. 数据清洗


数据清洗占数据分析工作量的大头。在拉勾网搜索深圳市的“数据分析”职位,结果得到369个职位。查看职位名称时,发现有4个实习岗位。由于我们研究的是全职岗位,所以先将实习岗位剔除。由于工作经验和工资都是字符串形式的区间,我们先用正则表达式提取数值,输出列表形式。工作经验取均值,工资取区间的四分位数值,比较接近现实。

数据清洗,剔除实习岗位

df.drop(df[df[‘职位名称’].str.contains(‘实习’)].index, inplace=True)

print(df.describe())

由于CSV文件内的数据是字符串形式,先用正则表达式将字符串转化为列表,再取区间的均值

pattern = ‘\d+’

df[‘工作年限’] = df[‘工作经验’].str.findall(pattern)

avg_work_year = []

for i in df[‘工作年限’]:

如果工作经验为’不限’或’应届毕业生’,那么匹配值为空,工作年限为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.to_csv(‘draft.csv’, index = False)

4. 词云


我们将职位福利这一列的数据汇总,生成一个字符串,按照词频生成词云实现python可视化。以下是原图和词云的对比图,可见五险一金在职位福利里出现的频率最高,平台、福利、发展空间、弹性工作次之。

在这里插入图片描述

5. 描述统计


在这里插入图片描述

可知,数据分析师的均值在14.6K,中位数在12.5K,算是较有前途的职业。数据分析散布在各个行业,但在高级层面上涉及到数据挖掘和机器学习,在IT业有长足的发展。

我们再来看工资的分布,这对于求职来讲是重要的参考:

在这里插入图片描述

工资在10-15K的职位最多,在15-20K的职位其次。个人愚见,10-15K的职位以建模为主,20K以上的职位以数据挖掘、大数据架构为主。

我们再来看职位在各区的分布:

在这里插入图片描述

数据分析职位有62.9%在南山区,有25.8%在福田区,剩下少数分布在龙岗区、罗湖区、宝安区、龙华新区。我们以小窥大,可知南山区和福田区是深圳市科技业的中心。

6. 实证统计


我们希望获得工资与工作经验、学历的关系,由于学历分三类,需设置3个虚拟变量:大专、本科、硕士。多元回归结果如下:

在这里插入图片描述

在0.05的显著性水平下,F值为82.53,说明回归关系是显著的。t检验和对应的P值都小于0.05表明,工作经验和3种学历在统计上都是显著的。另外,R-squared的值为0.41,说明工作经验和学历仅仅解释了工资变异性的41%。这点不难理解,即使职位都叫数据分析师,实际的工作内容差异比较大,有的只是用Excel做基本分析,有的用Python、R做数据挖掘。另外,各个公司的规模和它愿意开出的工资也不尽相同。而工作内容的差异和公司的大方程度是很难单凭招聘网页上的宣传而获得实际数据,导致了模型的拟合优度不是很好这一现实。

由于回归模型总体是显著的,我们可以将自变量的值代入回归方程,获得各个学历的工资的期望值E。对于数据分析职位,以1年工作经验为例,大专学历的期望工资是7.8K,本科学历的期望工资是10.8K,硕士学历的期望工资是17.6K。这证实了“知识改变命运”这一说法。

7. 完整代码


由于每次运行爬虫耗时约30分钟,而运行数据分析耗时几秒钟,我们将两部分的工作单独运行,以节省数据分析的时间。

7.1 爬虫部分的代码

import requests

import math

import pandas as pd

import time

‘’’

python学习交流群:1136201545更多学习资料可以加群获取

‘’’

def get_json(url,num):

‘’‘’‘从网页获取JSON,使用POST请求,加上头部信息’‘’

my_headers = {

‘User-Agent’:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36’,

‘Host’:‘www.lagou.com’,

‘Referer’:‘https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90?labelWords=&fromSearch=true&suginput=’,

‘X-Anit-Forge-Code’:‘0’,

‘X-Anit-Forge-Token’: ‘None’,

‘X-Requested-With’:‘XMLHttpRequest’

}

my_data = {

‘first’: ‘true’,

‘pn’:num,

‘kd’:‘数据分析’}

res = requests.post(url, headers = my_headers, data = my_data)

res.raise_for_status()

res.encoding = ‘utf-8’

得到包含职位信息的字典

page = res.json()

return page

def get_page_num(count):

‘’‘’‘计算要抓取的页数’‘’

每页15个职位,向上取整

res = math.ceil(count/15)

拉勾网最多显示30页结果

if res > 30:

return 30

else:

return res

def get_page_info(jobs_list):

‘’‘’‘对一个网页的职位信息进行解析,返回列表’‘’

page_info_list = []

for i in jobs_list:

job_info = []

job_info.append(i[‘companyFullName’])

job_info.append(i[‘companyShortName’])

job_info.append(i[‘companySize’])

job_info.append(i[‘financeStage’])

job_info.append(i[‘district’])

job_info.append(i[‘positionName’])

job_info.append(i[‘workYear’])

job_info.append(i[‘education’])

job_info.append(i[‘salary’])

job_info.append(i[‘positionAdvantage’])

page_info_list.append(job_info)

return page_info_list

def main():

url = ‘https://www.lagou.com/jobs/positionAjax.json?city=%E6%B7%B1%E5%9C%B3&needAddtionalResult=false’

先设定页数为1,获取总的职位数

page_1 = get_json(url,1)

total_count = page_1[‘content’][‘positionResult’][‘totalCount’]

num = get_page_num(total_count)

total_info = []

time.sleep(20)

print(‘职位总数:{},页数:{}’.format(total_count,num))

for n in range(1,num+1):

对每个网页读取JSON, 获取每页数据

page = get_json(url,n)

jobs_list = page[‘content’][‘positionResult’][‘result’]

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值