10分钟教你用python爬取网站信息:这可能是全网最好用的爬虫代码

爬取拉勾网关于任何一个职位相关的数据信息,并将爬取的数据已csv各式存入文件,然后对csv文件相关字段的数据进行清洗,并对数据可视化展示。

一、数据准备

随便搜索一个岗位,例如BI工程师,然后右键点击F12使用检查功能查看网页源代码,当我们点击下一页观察浏览器的搜索栏的url并没有改变,这是因为拉勾网做了反爬虫机制, 职位信息并不在源代码里,而是保存在JSON的文件里,因此我们直接下载JSON,并使用字典方法直接读取数据。即可拿到我们想要的职位相关的信息。

待爬取的BI工程师职位信息如下:

为了能爬到我们想要的数据,我们要用程序来模拟浏览器来查看网页,所以我们在爬取的过程中会加上头信息,头信息也是我们通过分析网页获取到的,通过网页分析我们知道该请求的头信息,以及请求的信息和请求的方式是POST请求,这样我们就可以该url请求拿到我们想的数据做进一步处理.

爬取网页信息代码如下:import requests import csv,time url = ?needAddtionalResult=false def get_cookie(): cookie = requests.get(?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: ?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类公司为主。

恍然大悟,清晰明了~知识就是财富,撸起袖子加油干吧!