引子

要说在当今的编程圈,找10位程序猿询问下当前世界上最好的语言是哪个,那必须是 PHP(强迫症)!但是如果你询问当今最火爆的语言是哪个,那么80%的小伙伴儿会毫不犹豫的告诉你,是 Python!

不错,Python 依靠其简单易学,语言优雅等优势早早就获得了众多码农的爱戴,现如今又借助着人工智能这股强劲的东风,更加风光无限。

也正是因为如此,每年才会有众多的新鲜小白们跨入 Python 的大门,希望可以在未来的某一天,找到一条比较好的职业道路。

但是语言火爆,就一定代表职业前景美好嘛,为了解开这个疑问,我爬取了 Boss 直聘网站上帝都地区的 Python 相关岗位,来看看对于正在寻找 Python 岗位的公司,他们的要求是怎样的,薪资状况又是什么水平呢。

抓取数据

Boss 直聘网站大家应该都非常清楚了,就不做过多介绍了,直接进入主题。

页面分析

在 Boss 直聘的官网上搜索 Python,可以看到浏览器的 URL 变为如下:

把该地址复制到 Postman 尝试访问,发现无法得到正确的返回:

此时,再次回到浏览器,查看该请求下面的 headers,可以看到其中有一个 cookie,是很长的一串字符串,我们拷贝这个 cookie 到 Postman 中,再次请求:

成功了,看来 Boss 直聘网也只是做了简单的 cookies 验证。

BeautifulSoup 使用

下面就是解析 HTML 数据了,我比较习惯用 BeautifulSoup 这个库来解析。

from bs4 import BeautifulSoup

import requests

url = 'https://www.zhipin.com/job_detail/?query=python&city=101010100'

res = requests.get(url, headers=header).text

print(res)

content = BeautifulSoup(res, "html.parser")

ul = content.find_all('ul')

print(ul[12])

可以使用 BeautifulSoup 的 find 函数来查找 HTML 的元素标签,个人觉得还是挺方便的,虽然说速度上比 xpath 要慢,但是书写简单呀。

编写代码

我们通过分析 HTML 网页可以知道,所有的工作信息都是保存在 ul 这个标签中的,我们可以通过上面的代码拿到页面中所有的 ul 标签,find_all 返回的是一个列表,然后再查看,工作具体位于第几个 ul 中,这样就拿到具体的工作信息了。

如图中所示,我们需要抓取红框中的信息,主要分为四部分。

python:可以得到该 job 具体页面地址

10-15K:每个 job 的薪资

柯*特集团:招聘公司名称

北京 朝阳区 望京|3-5年|学历不限:该 job 的详情信息

对于前三个信息,还是比较好抓取的。

job_details_uri = job.find('h3', attrs={'class': 'name'}).find('a')['href']

job_company = job.find('div', attrs={'class': 'company-text'}).find('h3', attrs={'class': 'name'}).find('a').text

job_salary = job.find('h3', attrs={'class': 'name'}).find('span', attrs={'class': 'red'}).text

对于 job 的详情信息,需要用到正则表达式来分割字符串,我们先来看下该部分的原始形式:

又可以把该部分切分成三块,site、year 和 edu。可以使用正则的 group 特性,帮助我们完成切分,最后我写的正则如下:

rege = r'

([\\u4e00-\\u9fa5 ]+)([\d+-年]+|[\\u4e00-\\u9fa5]+)([\\u4e00-\\u9fa5]+)'

正则表达式的具体写法这里就不说了,不熟悉的可以自行查找下。

下面把这部分代码整合到一起:

for job in jobs:

job_dict = {}

job_details_uri = job.find('h3', attrs={'class': 'name'}).find('a')['href']

job_company = job.find('div', attrs={'class': 'company-text'}).find('h3', attrs={'class': 'name'}).find('a').text

job_salary = job.find('h3', attrs={'class': 'name'}).find('span', attrs={'class': 'red'}).text

job_details = str(job.find('p'))

print(job_details)

job_rege = re.match(rege, job_details)

job_dict['name'] = job_company

job_dict['uri'] = job_details_uri

job_dict['salary'] = job_salary

job_dict['site'] = job_rege.group(1)

job_dict['year'] = job_rege.group(2)

job_dict['edu'] = job_rege.group(3)

job_list.append(job_dict)

print(job_list)

由于我们最后还是得到了一个列表,里面包含字典,那么保存到 MongoDB 中应该是最为方便快捷的了。

mongo_collection.insert_many(job_list)

抓取多个页面

通过查看 Boss 网站的下一页源码可得到翻页 URL 的规律:

https://www.zhipin.com/c101010100/?query=python&page=

c101010100:是城市代码,在我们这里就代表北京

query:也很明显,就是我们的搜索关键字

page:页数

于是我们最后整合代码如下:

def jobs(page):

for i in range(1, page + 1):

job_list = []

try:

print("正在抓取第 %s 页数据" % i)

uri = '/c101010100/?query=python&page=%s' % i

res = requests.get(config.url + uri, headers=header).text

content = BeautifulSoup(res, "html.parser")

ul = content.find_all('ul')

jobs = ul[12].find_all("li")

for job in jobs:

job_dict = {}

job_details_uri = job.find('h3', attrs={'class': 'name'}).find('a')['href']

job_company = job.find('div', attrs={'class': 'company-text'}).find('h3', attrs={'class': 'name'}).find(

'a').text

job_salary = job.find('h3', attrs={'class': 'name'}).find('span', attrs={'class': 'red'}).text

job_details = str(job.find('p'))

job_rege = re.match(rege, job_details)

job_dict['name'] = job_company

job_dict['uri'] = job_details_uri

job_dict['salary'] = job_salary

try:

job_dict['site'] = job_rege.group(1)

job_dict['year'] = job_rege.group(2)

job_dict['edu'] = job_rege.group(3)

except:

continue

job_list.append(job_dict)

print(job_list)

# save to mongoDB

try:

mongo_collection.insert_many(job_list)

except:

continue

time.sleep(1)

except:

continue

因为我上面的正在表达式并不能匹配所有的情况,所以使用 try…except 来忽略了其他不规则的情况。

岗位详情抓取

job 详情抓取完毕之后,开始抓取岗位详情,就是每个 job 的具体要求,毕竟知己知彼,百战不殆。

我们可以从 URI 中获得每个工作的详情页面地址,然后再拼接到 Boss 的主 URL 上:

https://www.zhipin.com/job_detail/a8920821a7487a901HJ43tm7EFY~.html

再来看下工作详情页面,所有的任职描述都在如下的 div 标签中:

没有什么特殊的,直接用 BeautifulSoup 解析即可。

def run_main():

jobs = job_collection.find()

for job in jobs:

print('获得工作的uri ', job['uri'])

get_details(job)

time.sleep(1)

def get_details(items):

base_url = config.url

url = base_url + items['uri']

company_name = items['name']

try:

res = requests.get(url, headers=header).text

content = BeautifulSoup(res, "html.parser")

text = content.find('div', attrs={'class': 'text'}).text.strip()

result = {'name': company_name, 'details': text}

details_collection.insert_one(result)

except:

raise

if __name__ == '__main__':

run_main()

最后我把爬取到的数据都保存到了 mlab 在线服务器中了,有需要的可以来这里获取

job_conn = MongoClient("mongodb://%s:%s@ds151612.mlab.com:51612/boss" % ('boss', 'boss123'))

job_db = job_conn.boss

job_collection = job_db.boss

details_collection = job_db.job_details

分析数据

Python 相关工作的数据已经拿到了,下面我们就来简单的做些分析,看看 Python 的工作前景到底怎么样

薪资水平

我们先来看看大家最关心的薪资水平吧

发现在我爬取的数据中,15-30K 的薪资是占据绝大多数的,次之的是 15-25K,总的来说,这个水平在北京只能算是中等吧。

当然我们也看到了,还是有一些企业在用高薪招 Python 工程师,那就是有9家企业报价到了 30-60K,这个薪资对于年入百万的大佬来说可能不算什么,但是我们相信对于我们绝大多数的普通码农来说那绝对是超级高薪了,所以我们不能放过对于这种高薪的追求,来看看这些岗位的技能要求吧

出高薪的企业是如下

对于我来说比较熟悉的企业还是蛮多的,映客、旷视、网易,京东都是大厂了,看来大厂就是财大气粗

再来看看他们对于职位的要求,高频词词云

基础组件 redis,MySQL,web 框架 tornado,flask 和 Django,这些技能看来是我们寻求高薪 Python 岗位的必备技能了。

而 “熟练,善于,掌握,精通” 等高频词语则告诉了我们,掌握一项技能,不能仅仅是知道了一些皮毛,我们要知其然,更要知其所以然。

工作年限

接下来再看看 Python 岗位对于工作年限上的要求又是怎样的呢

图片描述

大部分的工作年限要求都是集中在了3-5年,看来这个工龄的码农们应该是比较吃香的,年轻力壮,而且可塑性强,关键是能加班啊!

下面再来看看对于学历的要求

都说现在的企业招聘对于学历卡的严,但是在上图中能看出,大多数公司要求也不是特别高,只要你是本科毕业,最起码学历这关你是过的。

不过还是有一些企业要求是硕士,很有想法嘛,直接卡掉了 N 多的本科生,那么我们就来看看这些企业招收硕士的情况

确实有很多大厂,比如爱奇艺和旷视。但是其他的不仅公司名气不够,就连给的薪资也不够看啊,那个绿盟科技是什么鬼,难不成是薪资少写了一个零嘛!

所有任职要求词云

最后,我们再来看看,想要找一份 Python 相关的工作,哪些技能是必备的呢

图片描述

精通 Python 就不用说了,那是本职。Java 语言的要求出现的频率也比较高,看来现在越来越要求程序猿们一人精通多种语言了,毕竟艺多不压身嘛。还有就是要熟悉 Linux,毕竟我们大多数的服务都是部署在 Linux 系统上的,不会怎么行呢。然后就是计算机专业,web 开发,Redis,MySQL 等等通用的技能了,掌握掌握,统统掌握。

怎么样,看完上面的分析,你有信心找到一份不错的 Python 相关的工作吗?

boss直聘python_爬Boss直聘,分析2019下半年Python工作现状相关推荐

  1. 爬取猎聘python_爬取猎聘大数据岗位相关信息--Python

    猎聘网站搜索大数据关键字,只能显示100页,爬取这一百页的相关信息,以便做分析. __author__ = 'Fred Zhao' import requests from bs4 import Be ...

  2. python爬取数据案例分析_基于Python及webdriver的网页抓取案例

    上次有朋友问怎么抓取交易所网站的数据,特别是历史数据,这里特别推荐使用selenium这一自动化测试框架. 原本selenium是用来完成大量基于浏览器的自动化测试的,但由于可以方便地执行JS代码,摸 ...

  3. python_对象的基本组成和内存示意图---python工作笔记016

    然后我们再来看看python中的,对象 稍微理解一下吧,跟c++,java中的对象,还是不太一样的 可以看到,可以这样理解,对象在内存,这个停车场中,可以是一个一个的车位,每个车位 都有个id,比如c ...

  4. 基于Python的拉勾网Python工程师招聘信息的爬取和处理分析

    目录 一.项目简介 1.项目完成的功能 2.项目完成的特色 3.项目采用的技术栈 二.项目的需求分析 1.项目的功能需求分析 2.项目的非功能需求分析 系统性能需求 系统观感需求(界面需求) 三.项目 ...

  5. Python selenium Boss直聘数据爬取(仅供学习使用)

    写在前面,因为最近刚好需要分析行业数据,又在查询时,发现了许多博主写了一些东西,但很多都已经失效了,所以写了那么一篇文章,希望能够帮到大家 注:BOSS直聘数据为js加载数据,故使用selenium ...

  6. 2019年末逆向复习系列之Boss直聘Cookie加密字段__zp_stoken__逆向分析

    郑重声明:本项目的所有代码和相关文章, 仅用于经验技术交流分享,禁止将相关技术应用到不正当途径,因为滥用技术产生的风险与本人无关. 这篇文章是公众号<云爬虫技术研究笔记>的<2019 ...

  7. BOSS直聘推出“百万BOSS拾亿”计划 将提供10亿商业产品补贴

    [TechWeb]7月19日消息,日前,互联网招聘平台BOSS直聘发布"百万BOSS拾亿"计划,针对首次在平台上招募人才的企业一把手提供总价值10亿元的商业产品资源扶持. 据介绍, ...

  8. 20230519从UI的角度分析猎聘干不过BOSS直聘

    20230519从UI的角度分析猎聘干不过BOSS直聘 2023/5/19 18:25 https://www.zhipin.com/web/geek/chat BOSS直聘 https://www. ...

  9. python3 scrapy实战:爬取猎聘网招聘数据至数据库(反爬虫)

    首先注明:感谢拉勾网提供的权威.质量的数据,本人抱着学习的态度,不愿增加其服务器负担,与dos攻击. 继前两篇爬取拉勾网.直聘网后的第三篇文章,同样是使用scrapy来获取网站的招聘信息,并且保存至M ...

最新文章

  1. nodeValue以及其与value的区别以及JS nodeName、nodeValue、nodeType返回类型
  2. NGUI-制作位图字体以及图文混排
  3. rabbitmq 启动异常_RabbitMQ:消息发送确认 与 消息接收确认(ACK)
  4. 动画狗奔跑gif图片_常用的GIF制作工具,自媒体人常用,你还不会做表情包
  5. 2017/Province_Java_C/2、兴趣小组
  6. ajax中datatype是json,dataType:'json'vs data:$ .ajax中的JSON.stringify(obj)
  7. java 高并发 订单编号递增(解决方案)
  8. java常用算法_五分钟记住Java常用的八种排序算法与代码实现
  9. 暗藏 15 年,Linux 惊曝 3 大 Bug 直取 root 权限!
  10. 贺利坚老师汇编课程70笔记:端口的读写
  11. 虚拟机的性能测试经验总结(一)
  12. 元宇宙引擎脑语言2500令v0.5.6
  13. VSTO 实现word的多级列表功能
  14. 产品做出来了,我们该怎么办?
  15. Canny算子中的非极大值抑制(Non-Maximum Suppression)分析
  16. 社群团购到底有哪些优势?为什么社群团购很容易打造爆品?
  17. Java核心技术卷一
  18. local cell id和cell id区别
  19. 这是一页纸商业计划书 (Business Plan) 模板(转)
  20. 不会吧不会吧?价值“百万”的社招面试题惨遭泄露:猛补了这个,真香...

热门文章

  1. 技术总监.部门经理.程序员
  2. 若要赞美晴天请等到黄昏之后
  3. 黑色沙漠 无法使用未完成的文字
  4. springboot+APP基于Android的洗衣店预约系统毕业设计源码260839
  5. Hulu全球研发副总裁诸葛越谈人工智能
  6. 研发过程管理与质量控制
  7. Unable to connect to the frida server: this feature requires an iOS Developer Disk Image to be mount
  8. 用js实现点击链接跳转APP对应页面
  9. 热辣7月,惊爆福利 统信UOS个人体验版最佳体验师就是你!
  10. 后厂村折叠:月薪追赶五万,生活低于五千