利用Python分析2018智联招聘全国各个城市的职位数排名

新年快到了,工作了一年你,躺在床上,退下一身的疲怠,是否也曾向往去到一个新的城市工作和生活呢?

那中国除了公认的北上广深工作机会最多以外,还有哪些城市也相对不错呢?

这时候我们可能会打开招聘网站开始选择城市然后来了解这个城市的职位情况.

那么一直秉持着人生苦短,我学python的我们,为什么不能用python来写一个分析2018全国各个城市的职位数排名的爬虫脚本呢?

这么一想十分可行啊,我们只需要找到一个目标招聘平台,然后通过用代码get到它的html正文,通过BeautifulSoup分析html来得到我们想要的数据,然后用matplotlib画出图表就可以了. (完整代码见本文末尾.)

于是立马动手,首先,既然我们是要分析全国范围内的所有城市的职位数,那么我们肯定首先要把所有的城市先列出来.然而这里想必地理学的再好的同学也不可能能把全国范围内所有的城市都能背下来吧,所以这一步,我们也是用python来爬取到全国范围内所有的城市名称.

1.爬取全国范围内所有的城市列表

通过一番查找,终于找到了智联上的这个页面:http://www.zhaopin.com/citymap.html

乍一看好像所有的城市名都是加粗的,右键查看一下源代码,果然,所有的城市名都被加上了<strong>标签,类似于这样

那就简单了,我们直接获取该网页所有<strong>标签里面的内容,就是标签名了.代码:

这样我们就获取到了所有的城市名,下一步我们就是要通过遍历这些城市名来查询某一个职业的职位数了.

2.遍历城市名,爬取对应城市的职位数.

这时候我们先打开智联的搜工作页面,输入职位名”android”,地址选择”烟台”,然后点击搜工作,这时候注意到,浏览器的地址栏变成了:

原来,智联的找工作这个按钮是执行了一个get请求而已,其中jl=和&kw=即分别代表要查找的城市和职位关键字,这时候先不要着急写代码,我们先来像上面说的一样来分析一下这个页面.

首先第一眼直接就找到了这样的字眼:

上面赫然显示着共84个职位满足条件,一切总是那么完美,不需要多余的任何操作,仿佛传到桥头自然直一样,这不正是我们想要找的职位数吗.然后右键选择查看源代码.恩,不得不说相当完美!

但这次数据格式好像比较复杂一点,我们如果仅仅简单用<em>84</em>标签包裹的内容来获取职位数的话好像已经行不通了,因为该网页很多的地方也使用了<em>标签,那怎么办呢,这时候我们只能使用正则表达式来匹配了.

修修改改,最终的正则表达式是这样的:(?!共<em>)[0-9]+(?=</em>个职位满足条件),其中的?!和?=则是让其所在的括号内的内容不放入匹配缓冲区里.

好,接下来我们就可以结合以上的内容来写代码了.

写完赶紧兴冲冲的run一下,…然而…

结果是运行没有报错也没有任何输出,左边的红色方块显示程序还在运行中,是的,它卡住了,停止运行再重新start还是会卡主,检查一下程序也没问题啊,what?辛辛苦苦才到达了这步救过竟然卡住了?这个时候我们不要着急,身为一个整天跟各种BUG打交道的程序员,一定要镇定,努力分析问题可能的原因,然后解决问题.

继续回到我们的这个问题上,排除我们程序本身的问题,会不会是对方的网站早知道我们会写python爬取,故意给我们加了限制呢?于是我们给我们的这次访问加上一个请求头试试,让我们的这次请求伪装成来自浏览器的访问.

ok,改代码,给这次get请求加上一个请求头:

运行:

果然这下就没问题了,程序瞬间就成功获取到了职位数为 84。

继续改动一下程序,遍历所有的城市列表,并根据key=城市名,value=职位数的格式将所有的城市职位数都获取来存到一个字典(Dictionary)里.

这样我们就得到了这样的数据: {'北京': 4205, '上海': 2702, '广州': 1442, '深圳': 1872, '天津': 536 ...}

3.使用matplotlib根据数据画出图表

通过上面我们获取完了数据之后,直接用matplotlib库画出图表来就可以直观的看到各个城市的职位数情况了.

4.结果展示

程序运行:

运行结果:

还可以修改一下脚本中的职位名,查找其他职业:

代码地址:https://github.com/miqt/PythonLearn/blob/b3d33166303c3ec19eae3eedf13810af0234c9d9/ZhiLian.py 作者:痕迹 来源:http://imaster.top/


原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2018-01-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ThoughtWorks

再看API设计——从黑客的角度 | TW洞见

今日洞见 文章作者、部分图片来自ThoughtWorks:贺思聪。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体...

32540
来自专栏安恒信息

从《公安机关网络安全执法检查自查表》看2018年网络安全执法检查工作

《公安机关网络安全执法检查自查表》是配合每年公安机关开展网络安全执法检查的重要工具之一,该表格主要有行业主管部门网络安全领导保障情况调查、各单位信息系统网络安全...

48710
来自专栏程序人生

Botwall - Bot Firewall??

Mountain View的El Camino Real和Castro交界的地方,有一栋大楼,地址是:800 W El Camino Real,里面入驻了不少创...

38570
来自专栏养码场

一周播报|明明BUG这么多,死也不给看代码?这位程序员你咋这么矫情......

Q:有两张表(一个库),一个是用户表、一个是会员表,一个会员记录对应多条用户记录,有一个事务过程如下:每更新用户表中一条记录,更新(update)对应会员表中的...

9320
来自专栏腾讯大讲堂的专栏

一直陪伴你成长的QQ相册后台长什么样?

QQ空间陪伴大家走过了将近12年的时光。时至今日,QQ相册已经存储了超过2万亿张图片,对比业界,可以说是当之无愧的中国第一大相册,也是世界上规模最大的图片类产品...

520100
来自专栏FreeBuf

SiteLock最新报告显示:针对网站的攻击激增,平均每天有63起

根据SiteLock于本周一发布的最新分析报告显示,在过去的几个月里,针对网站的攻击活动数量出现了大幅增加。 ? SiteLock的网站安全内部报告是基于对超过...

23690
来自专栏编程之旅

iOS漫谈——对于项目架构的思考

又一次的版本更新上架,心情容不得片刻舒缓,新的迭代任务又明白的摆在桌面上。今年上半年自己琢磨完ReactiveCocoa之后,对手上了项目做了MVVM架构的尝试...

14730
来自专栏Java后端技术栈

如何做到简历中要求的“要有扎实的Java基础”

LZ憾言之,“惜了,三至五为佳。然如汝有扎实之基础,且附一技之长,倒也并非不可呀。”

13730
来自专栏即时通讯技术

解密“达达-京东到家”的订单即时派发技术原理和实践

达达-京东到家作为优秀的即时配送物流平台,实现了多渠道的订单配送,包括外卖平台的餐饮订单、新零售的生鲜订单、知名商户的优质订单等。为了提升平台的用户粘性,我们需...

24610
来自专栏程序员互动联盟

如何成为一个黑客?

很多人要成为高大上的黑客需要学习哪些基本功? 能盗取账号,能攻击服务器? 再牛的黑客起码是一个合格的程序员 所以说想成为黑客先成为合格的程序再说,说别的就是空谈...

53570

扫码关注云+社区

领取腾讯云代金券