生信职位拉勾网爬取

大家好,之前答应健明师兄爬取一下招聘网的信息,今天我就给大家推送一条生物信息行业就业信息的一些信息,数据源来自拉勾网首先是整个网络爬虫的代码1.导入相应的库import requestsimport mathimport pandas as pdimport time2.构造爬取函数def get_json(url,num):'''''从网页获取JSON,使用POST请求,加上头部信息'''my_headers = {'Accept': 'application/json, text/javascript, */*; q=0.01','Accept-Encoding': 'gzip, deflate, br','Accept-Language':'zh-CN,zh;q=0.9','Cache-Control': 'no-cache','Connection': 'keep-alive','Content-Length': '55','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8','Cookie': '_ga=GA1.2.765752527.1538018402; user_trace_token=20180927112000-37beaeb4-c204-11e8-bb60-5254005c3644; LGUID=20180927112000-37beb2b2-c204-11e8-bb60-5254005c3644; index_location_city=%E5%85%A8%E5%9B%BD; JSESSIONID=ABAAABAABEEAAJAF72281935F8B1A25C8FD1DCE9FB23CEF; _gid=GA1.2.1024355859.1539227932; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1538034530,1538034547,1538034560,1539227934; TG-TRACK-CODE=search_code; LGSID=20181011152610-ecdb69fd-cd26-11e8-afa8-525400f775ce; _gat=1; LGRID=20181011160410-3c4f1b3c-cd2c-11e8-afac-525400f775ce; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1539245052; SEARCH_ID=0555f2889e5049b09a78dcc9fad252b0','Host': 'www.lagou.com','Origin': 'https://www.lagou.com','Referer': 'https://www.lagou.com/jobs/list_%E7%94%9F%E7%89%A9%E4%BF%A1%E6%81%AF?px=default&city=%E5%85%A8%E5%9B%BD','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36','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 pagedef get_page_num(count):'''''计算要抓取的页数'''# 每页15个职位,向上取整res = math.ceil(count/15)# 拉勾网最多显示30页结果if res > 30:return 30else:return resdef 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['city'])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_listurl = 'https://www.lagou.com/jobs/positionAjax.json?px=default&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))职位总数:57267,页数:30for n in range(1,num+1):# 对每个网页读取JSON, 获取每页数据page = get_json(url,n)jobs_list = page['content']['positionResult']['result']page_info = get_page_info(jobs_list)total_info += page_infoprint('已经抓取第{}页, 职位总数:{}'.format(n, len(total_info)))# 每次抓取完成后,暂停一会,防止被服务器拉黑time.sleep(30)#将总数据转化为data frame再输出df = pd.DataFrame(data = total_info,columns = ['公司全名','公司简称','公司规模','融资阶段','工作地点','区域','职位名称','工作经验','学历要求','工资','职位福利'])#df.to_csv('lagou_jobs.csv',index = False)#print('已保存为csv文件.')已经抓取第1页, 职位总数:15已经抓取第2页, 职位总数:30已经抓取第3页, 职位总数:45已经抓取第4页, 职位总数:60已经抓取第5页, 职位总数:75已经抓取第6页, 职位总数:90已经抓取第7页, 职位总数:105已经抓取第8页, 职位总数:120已经抓取第9页, 职位总数:135已经抓取第10页, 职位总数:150已经抓取第11页, 职位总数:165已经抓取第12页, 职位总数:180已经抓取第13页, 职位总数:195已经抓取第14页, 职位总数:210已经抓取第15页, 职位总数:225已经抓取第16页, 职位总数:240已经抓取第17页, 职位总数:255已经抓取第18页, 职位总数:270已经抓取第19页, 职位总数:285已经抓取第20页, 职位总数:300已经抓取第21页, 职位总数:315已经抓取第22页, 职位总数:330已经抓取第23页, 职位总数:345已经抓取第24页, 职位总数:360已经抓取第25页, 职位总数:375已经抓取第26页, 职位总数:390已经抓取第27页, 职位总数:405已经抓取第28页, 职位总数:420已经抓取第29页, 职位总数:435已经抓取第30页, 职位总数:450df

3.数据可视化展示df.to_excel("result.xls",index=False,encoding="utf_8")import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport jiebafrom wordcloud import WordCloud  # 词云import matplotlib as mpl  # 配置字体from pyecharts import Geo  # 地理图4.绘图区域设置plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签plt.rcParams['axes.unicode_minus']=False #用来正常显示负号plt.rcParams["axes.labelsize"] = 16.plt.rcParams["xtick.labelsize"] = 14.plt.rcParams["ytick.labelsize"] = 14.plt.rcParams["legend.fontsize"] = 12.plt.rcParams["figure.figsize"] = [15., 15.]5.读取数据及绘图# 读入数据df = pd.read_excel('result.xls')# 查看头几行df.head()

6.学历要求很明显看到,目前来说本科需求量最大,博士就是稀有动物了df['学历要求'].value_counts().plot(kind='barh',rot=0)plt.show()

7.工作经验接着我们看一下工作经验,大部分公司要求3-5年的工作经验,其次是不限工作时间,毕竟生信还是靠经验吃饭的df['工作经验'].value_counts().plot(kind='barh')  #绘制条形图plt.show()

8.工作地点工作地点就是北上广深和杭州呀,推荐一下,建明公司在珠海,哈哈哈df['工作地点'].value_counts().plot(kind='pie',autopct='%1.2f%%',explode=np.linspace(0,1.5,37))plt.show()

9.工资图(这里图的展现方式是有问题的)可以看到大部分工资集中在10K-20K,最高的有35K,毕竟很少df['工资'].value_counts().plot(kind='barh')  #绘制条形图plt.show()

#从lambda一直到*1000,是一个匿名函数,*1000的原因是这里显示的是几K几K的,我们把K切割掉,只要数字,就*1000了data2 = list(map(lambda x:(df['学历要求'][x],eval(re.split('k|K',df['工资'][x])[0])*1000),range(len(df))))#再把data2框架起来data3 = pd.DataFrame(data2)sort_by_degree['sortby'] = sort_by_degree['degree'].map(degree_mappings)sort_by_degree.sort_values(by='sortby', inplace=True)sort_by_degreedegreecountssortby0不限3912大专11023本科25634硕士4341博士2510.不同学历的薪酬大部分收入相对可观的是本科生和硕士生,所以生信菜鸟团之前写过帖子,关于读博到底应不应该?说明一点:群主是博士在读哦degree_mappings = {'不限':1, '大专':2, '本科':3, '硕士':4, '博士':5}group_by_degree = data3.groupby([0])[1]df_degree = []for group in sort_by_degree['degree']:v = group_by_degree.get_group(group).valuesdf_degree.append(v)ax9 = plt.figure(figsize=(10, 8)).add_subplot(111)sns.boxplot(data=df_degree)ax9.set_xticklabels(sort_by_degree['degree'], fontsize=18)ax9.set_title('不同学历的薪酬分布', fontsize=22)ax9.set_ylabel('薪酬K/月', fontsize=20)plt.show()

相信聪明的你看到这个图应该是就明白了!

(0)

相关推荐

  • 中国人民志愿军抗美援朝出国作战70周年,我用 Python 为英雄们送上祝福

    来源:Python 技术「ID: pythonall」 今年是中国人民志愿军抗美援朝出国作战 70 周年,刚好上个月上映了同题材的电影「金刚川」.该影片主要讲的是抗美援朝战争最终阶段,志愿军准备在金城 ...

  • Python开发在北京的就业现状分析

    Python开发在北京的就业现状分析 宇亮 Python中文社区 2018-12-26 相信各位同学多多少少在拉钩上投过简历,今天突然想了解一下北京Python开发的薪资水平.招聘要求.福利待遇以及公 ...

  • Python 抓取知乎几千张小姐姐图片是什么体验?

    来源:Python 技术「ID: pythonall」 知乎上有许多关于颜值.身材的话题,有些话题的回复数甚至高达几百上千,拥有成千上万的关注者与被浏览数.如果我们在摸鱼的时候欣赏这些话题将花费大量的 ...

  • 用 Python 来了解一下《安家》

    如果要选一部近期最火的电视剧,一定非<安家>莫属,你可能没有具体看过,但如果你看微博的话一定听过这个名字,这部电视剧多次登上微博热搜榜,好像还有几次冲上了热搜榜首,该剧主要讲述的是关于房产 ...

  • 100行代码爬取招聘职位数据

    一.背景 为了分析一线城市的房价在工资的占比,我用Python分别爬取了自如以及拉勾的数据.(见公众号「Crossin的编程教室」今天第1条推送) 前一篇文章用 scrapy 爬取了自如房源信息,本文 ...

  • 利用Python绘制关系网络图

    我们在做数据可视化时,要展现多个元素之间的相互关系时(比如人物关系图),常会用到网络图. 今天我们就分享一个在 Python 里绘制网络图的库:NetworkX,并显示它的基本操作. 一.Networ ...

  • python爬取44130条用户观影数据,分析挖掘用户与电影之间的隐藏信息!

    出处: Python爬虫数据分析挖掘 01 前言 明天就是大年初一,很多电影也上映,看电影前很多人都喜欢去『豆瓣』看影评,所以我爬取44130条『豆瓣』的用户观影数据,分析用户之间的关系,电影之间的联 ...

  • 视频讲解-R爬取生信软件列表到思维导图

    视频见文末,阅读原文更有惊喜大礼包,希望你听完我的视频,也能制作下面的思维导图!!! 了解并安装R 下载R语言的软件:https://cran.r-project.org/bin/windows/ba ...

  • 生信编程15.多个差异分析结果直接取交集和并集

    有一些五六年前的学生们都成长为了各个生物信息学相关公司的小领导,而且他们都有了自己的公众号,知乎号,也算是一番人物.最近他们跟我反馈面试找不到或者说很难直接考核筛选到认真干活的生信工程师,挺有意思的. ...

  • Crawler:爬虫之基于https+parse库实现爬取国内某知名招聘网上海、北京关于区块链职位的求职信息

    Crawler:爬虫之基于https+parse库实现爬取国内某知名招聘网上海.北京关于区块链职位的求职信息 输出结果 1.上海区块链职位 国内某知名招聘网上海关于区块链职位的求职信息分析图 2.北京 ...

  • (1条消息) python成功爬取拉勾网

    python成功爬取拉勾网(一个小白的心里路程) 最开始想爬取拉钩是因为半年前上python实验课的时候,老师给了两个任务,一个时爬取糗百的笑话内容,另一个时爬取拉勾网的职位信息,当时因为课时紧张的缘 ...

  • 1分生信数据挖掘成功抢走5分meta的职位

    前两天有粉丝反应自己输得好惨,5分的meta分析还不如1分的生信: meta分析本身是一种有争议的东西,有人认为苹果与橘子可以合并,有些人认为不可以,有些领导或者期刊认为是review,有些认为是论著 ...

  • 【Python实战】爬取5K分辨率超清唯美壁纸

    简介 壁纸的选择其实很大程度上能看出电脑主人的内心世界,有的人喜欢风景,有的人喜欢星空,有的人喜欢美女,有的人喜欢动物.然而,终究有一天你已经产生审美疲劳了,但你下定决定要换壁纸的时候,又发现网上的壁 ...

  • 【Python爬虫】:爬取58同城二手房的所有房产标题

    我们首先打开58同城的网站: 观察网站的版面: 发现所有的title都是以h3开头,并且具有class为" property-content-title-name " 因此我们可以 ...

  • Python爬虫新手入门教学(十三):爬取高质量超清壁纸

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...