Python爬虫爬取智联招聘(进阶版),大牛带你直击优秀开源框架灵魂

主函数

‘’’

csv_filename = ‘zl_’ + city + ‘_’ + keyword + ‘.csv’

txt_filename = ‘zl_’ + city + ‘_’ + keyword + ‘.txt’

headers = [‘job’, ‘years’, ‘education’, ‘salary’, ‘company’, ‘scale’, ‘job_url’]

write_csv_headers(csv_filename, headers)

for i in range(pages):

‘’’

获取该页中所有职位信息,写入csv文件

‘’’

job_dict = {}

html = get_one_page(city, keyword, region, i)

items = parse_one_page(html)

for item in items:

html = get_detail_page(item.get(‘job_url’))

job_detail = get_job_detail(html)

job_dict[‘job’] = item.get(‘job’)

job_dict[‘years’] = job_detail.get(‘years’)

job_dict[‘education’] = job_detail.get(‘education’)

job_dict[‘salary’] = item.get(‘salary’)

job_dict[‘company’] = item.get(‘company’)

job_dict[‘scale’] = job_detail.get(‘scale’)

job_dict[‘job_url’] = item.get(‘job_url’)

对数据进行清洗,将标点符号等对词频统计造成影响的因素剔除

pattern = re.compile(r’[一-龥]+')

filterdata = re.findall(pattern, job_detail.get(‘requirement’))

write_txt_file(txt_filename, ‘’.join(filterdata))

write_csv_rows(csv_filename, headers, job_dict)

4、数据分析


本节内容为此版本的重点。

4.1 工资统计

我们对各个阶段工资的占比进行统计,分析该行业的薪资分布水平。前面我们已经把数据保存到csv文件里了,接下来要读取salary列:

def read_csv_column(path, column):

‘’’

读取一列

‘’’

with open(path, ‘r’, encoding=‘gb18030’, newline=‘’) as f:

reader = csv.reader(f)

return [row[column] for row in reader]

main函数里添加

print(read_csv_column(csv_filename, 3))

#下面为打印结果

[‘salary’, ‘7000’, ‘5000’, ‘25000’, ‘12500’, ‘25000’, ‘20000’, ‘32500’, ‘20000’, ‘15000’, ‘9000’, ‘5000’, ‘5000’, ‘12500’, ‘24000’, ‘15000’, ‘18000’, ‘25000’, ‘20000’, ‘0’, ‘20000’, ‘12500’, ‘17500’, ‘17500’, ‘20000’, ‘11500’, ‘25000’, ‘12500’, ‘17500’, ‘25000’, ‘22500’, ‘22500’, ‘25000’, ‘17500’, ‘7000’, ‘25000’, ‘3000’, ‘22500’, ‘15000’, ‘25000’, ‘20000’, ‘22500’, ‘15000’, ‘15000’, ‘25000’, ‘17500’, ‘22500’, ‘10500’, ‘20000’, ‘17500’, ‘22500’, ‘17500’, ‘25000’, ‘20000’, ‘11500’, ‘11250’, ‘12500’, ‘14000’, ‘12500’, ‘17500’, ‘15000’]

从结果可以看出,除了第一项,其他的都为平均工资,但是此时的工资为字符串,为了方便统计,我们将其转换成整形:

salaries = []

sal = read_csv_column(csv_filename, 3)

撇除第一项,并转换成整形,生成新的列表

for i in range(len(sal) - 1):

工资为’0’的表示招聘上写的是’面议’,不做统计

if not sal[i] == ‘0’:

salaries.append(int(sal[i + 1]))

print(salaries)

下面为打印结果

[7000, 5000, 25000, 12500, 25000, 20000, 32500, 20000, 15000, 9000, 5000, 5000, 12500, 24000, 15000, 18000, 25000, 20000, 0, 20000, 12500, 20000, 11500, 17500, 25000, 12500, 17500, 25000, 25000, 22500, 22500, 17500, 17500, 7000, 25000, 3000, 22500, 15000, 25000, 20000, 22500, 15000, 22500, 10500, 20000, 15000, 17500, 17500, 25000, 17500, 22500, 25000, 12500, 20000, 11250, 11500, 14000, 12500, 15000, 17500]

我们用直方图进行展示:

plt.hist(salaries, bins=10 ,)

plt.show()

生成效果图如下:

在这里插入图片描述

从图中可以看出工资分布的情况,这样在你找工作时可以做一个参考。

4.2 职位描述词频统计

对职位描述词频统计的意义是可以了解该职位对技能的基本要求,如果正在找工作,可以估计一下自己的要求是否符合该职位;如果想要一年后换工作,那么也可以提前做好准备,迎接新的挑战。

词频统计用到了 jieba、numpy、pandas、scipy库。如果电脑上没有这两个库,执行安装指令:

  • pip install jieba

  • pip install pandas

  • pip install numpy

  • pip install scipy

4.2.1 读取txt文件

前面已经将职位描述保存到txt文件里了,现在我们将其读出:

def read_txt_file(path):

‘’’

读取txt文本

‘’’

with open(path, ‘r’, encoding=‘gb18030’, newline=‘’) as f:

return f.read()

简单测试一下:

import jieba

import pandas as pd

‘’’

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

‘’’

content = read_txt_file(txt_filename)

segment = jieba.lcut(content)

words_df=pd.DataFrame({‘segment’:segment})

print(words_df)

输出结果如下:

segment

0 岗位职责

1 参与

2 公司

3 软件产品

4 后台

5 研发

6 和

7 维护

8 工作

9 参与

10 建筑物

11 联网

12 数据分析

13 算法

14 的

15 设计

16 和

17 开发

18 可

19 独立

20 完成

21 业务

22 算法

23 模块

… …

从结果可以看出:“岗位职责”、“参与”、“公司”、软件产品“、”的“、”和“等单词并没有实际意义,所以我们要将他们从表中删除。

4.2.2 stop word

下面引入一个概念:stop word, 在网站里面存在大量的常用词比如:“在”、“里面”、“也”、“的”、“它”、“为”这些词都是停止词。这些词因为使用频率过高,几乎每个网页上都存在,所以搜索引擎开发人员都将这一类词语全部忽略掉。如果我们的网站上存在大量这样的词语,那么相当于浪费了很多资源。

在百度搜索stpowords.txt进行下载,放到py文件同级目录。接下来测试一下:

content = read_txt_file(txt_filename)

segment = jieba.lcut(content)

words_df=pd.DataFrame({‘segment’:segment})

stopwords=pd.read_csv(“stopwords.txt”,index_col=False,quoting=3,sep=" ",names=[‘stopword’],encoding=‘utf-8’)

words_df=words_df[~words_df.segment.isin(stopwords.stopword)]

print(words_df)

以下为输出结果

0 岗位职责

1 参与

2 公司

3 软件产品

4 后台

5 研发

7 维护

8 工作

9 参与

10 建筑物

11 联网

12 数据分析

13 算法

15 设计

17 开发

19 独立

21 业务

22 算法

23 模块

24 开发

28 产品

29 目标

31 改进

32 创新

33 任职

35 熟练

38 开发

39 经验

40 优先

41 熟悉

… …

从结果看出,那些常用的stop word比如:“的”、“和”、“可”等已经被剔除了,但是还有一些词如“岗位职责”、“参与”等也没有实际意义,如果对词频统计不产生影响,那么就无所谓,在后面统计时再决定是否对其剔除。

4.2.3 词频统计

重头戏来了,词频统计使用numpy:

import numpy

words_stat = words_df.groupby(by=[‘segment’])[‘segment’].agg({“计数”:numpy.size})

words_stat = words_stat.reset_index().sort_values(by=[“计数”],ascending=False)

print(words_stat)

以下是爬取全部“北京市海淀区Python工程师”职位的运行结果:

segment 计数

362 开发 505

590 熟悉 409

701 经验 281

325 工作 209

820 负责 171

741 能力 169

793 设计 161

82 优先 160

409 技术 157

621 相关 145

322 岗位职责 127

683 系统 126

64 产品 124

904 项目 123

671 算法 107

78 任职 107

532 框架 107

591 熟练 104

可以看出,某些词语还是影响了统计结果,我将以下stop word加入stopword.txt中:

开发、熟悉、熟练、精通、经验、工作、负责、能力、有限、相关、岗位职责、任职、语言、平台、参与、优先、技术、学习、产品、公司、熟练掌握、以上学历

最后运行结果如下:

775 设计 136

667 系统 109

884 项目 105

578 熟练 95

520 框架 92

656 算法 90

143 分析 90

80 优化 77

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

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

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



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

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

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

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
[外链图片转存中…(img-dt84R0lB-1711799413784)]

在这里插入图片描述

感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的:

① 2000多本Python电子书(主流和经典的书籍应该都有了)

② Python标准库资料(最全中文版)

③ 项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值