https://blog.csdn.net/weixin_39833290/article/details/110883212?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0-110883212-blog-125827925.pc_relevant_aa&spm=1001.2101.3001.4242.1&utm_relevant_index=2 爬取拉勾网关于任何一个职位相关的数据信息,并将爬取的数据已csv各式存入文件,然后对csv文件相关字段的数据进行清洗,并对数据可视化展示。 一、数据准备 随便搜索一个岗位,例如BI工程师,然后右键点击F12使用检查功能查看网页源代码,当我们点击下一页观察浏览器的搜索栏的url并没有改变,这是因为拉勾网做了反爬虫机制, 职位信息并不在源代码里,而是保存在JSON的文件里,因此我们直接下载JSON,并使用字典方法直接读取数据。即可拿到我们想要的职位相关的信息。 待爬取的BI工程师职位信息如下: 为了能爬到我们想要的数据,我们要用程序来模拟浏览器来查看网页,所以我们在爬取的过程中会加上头信息,头信息也是我们通过分析网页获取到的,通过网页分析我们知道该请求的头信息,以及请求的信息和请求的方式是POST请求,这样我们就可以该url请求拿到我们想的数据做进一步处理.爬取网页信息代码如下: import requests import csv,time url = 'https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false' def get_cookie(): cookie = requests.get('https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36' },allow_redirects=False).cookies return cookie def put_into(page,kd): headers = { 'Host': 'www.lagou.com', 'Origin': 'https://www.lagou.com', 'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36' } json = { 'first': 'true', 'pn': str(page), 'kd': str(kd) } response = requests.post(url=url, headers=headers, data=json, cookies=get_cookie()) response.encoding = response.apparent_encoding html = response.json()['content']['positionResult']['result'] savedata(html,kd) def savedata(html,kd): f = open(kd + '.csv', mode="a+",newline='',encoding='utf-8-sig') csv_write = csv.writer(f) csv_write.writerow(['职位名称', '公司名称', '公司规模', '城市', '薪资待遇', '工作经验', '是否全职', '学历要求', '公司福利', '发布时间']) for i in range(len(html)): positionName = html[i]['positionName'] # 职位名称 companyFullName = html[i]['companyFullName'] # 公司名称 companySize = html[i]['companySize'] # 公司规模 salary = html[i]['salary'] # 薪资待遇 city = html[i]['city'] workYear = html[i]['workYear'] # 工作经验 jobNature = html[i]['jobNature'] # 是否全职 education = html[i]['education'] # 学历要求 positionAdvantage = html[i]['positionAdvantage'] # 公司福利 lastLogin = html[i]['lastLogin'] # 发布时间 # print(positionName,companyFullName,companySize,salary,city,workYear,jobNature,education,positionAdvantage,lastLogin) csv_write.writerow([positionName, companyFullName, companySize, city, salary, workYear, jobNature, education, positionAdvantage,lastLogin]) f.close() if __name__ == '__main__': kd = str(input('请输入您想爬取的职业方向的关键词:')) for page in range(2,31): put_into(page,kd) print('第'+str(page-1)+'页爬取成功!') time.sleep(2) 输入你想要查取的岗位: 二、数据清洗 1、城市 拿到csv文件是只有公司名,没有城市名的,于是用了excel函数lookup做了一个匹配: 在D1-D20中输入常用的城市名 公式:在B1单元格中输入下列公式:=LOOKUP(32767,FIND(D$1:D$20,A1),D$1:D$20)。 2、薪水 将CSV文件数据导入FineBI中(新建数据链接,建立一个分析业务包,然后导入这张excel表)。因为薪水是以xxK-xxk(还有一些类似校招/薪资面议的数据)的形式进行存储的,我这边使用FineBI新增公式列(类似excel函数)将这些字符进行分割: 薪水下限(数值): indexofarray ( split (salary,"k-") ,1) 薪水上限(含K字符):indexofarray( split(salary,"k-") ,2) 薪水上限(数值):left( 薪水上限(文本),len(薪水上限(文本))-1 ) 求一下平均薪水 3.脏数据清洗: 浏览了一下数据,没有大问题,如果有一些BIM之类的过滤掉即可,不得不说拉勾的搜索还是很精准的。 三、数据可视化 数据可视化可以说是很简单了,拖拽要分析的数据字段即可。 但是这里用finebi分析要理解一个思路。常规我们用excel做分析或者说做图表,是先选用钻则图表然后设定系列、数值。这里没有系列和数值的概念,只有横轴和竖轴。拖入什么字段,该字段就以该轴进行扩展,至于图表嘛,finebi会自动判别推荐。最后展示: 四、分析结果 1、目前BI工程师岗位在拉勾招聘网站的平均薪资为20.61K,主要薪水区间大概在15-20K和大于25K,而这个薪资对应的年限大致在3年以上,本科学历。相关工作需求总数为301个(仅仅为某一天的招聘需求数据)。 2、从城市岗位需求数量分布来看,BI工程师需求主要集中在北京、上海、深圳、广州区域;各城市BI工程师平均薪水方面,去除岗位需求量较少的城市来看,国内排在前面的分别为北(24.57K)、上海(19.81)、杭州(18.75K)、深圳(18.60K)、广州(16.94K)。 3、从工作年限的平均薪水和岗位需求数量来看,工作5-10年的资深BI工程师的平均薪水可以达到27K以上(朝资深BI工程师方向奋斗!!!1年以下年限的计算出来的平均薪水虽然为22.17K,但是由于样本量只有3个,所以参考意义不大),也间接证明了一年内跳槽不好意思市场上没有你的岗位,工作需求最多的为3-5年的,平均薪水为21.24K。 4、从学历方面来看,最低学历需求主要以本科/大专为主,本科和大专学历要求的平均薪资分别为21.86和14.34K(感觉差距还是很大的,有机会提升学历一定不要放过),硕士学历需求很少。 5、看了一些高薪的招聘企业,最高的可以给到40K~60K的薪酬水平,其中主要是互联网、IT类公司为主。 恍然大悟,清晰明了~知识就是财富,撸起袖子加油干吧! |
|
来自: 山峰云绕 > 《Python代码知识游戏黑客编程与英语》