1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python3爬虫系列08之新版动态智联招聘并存取数据库进行可视化分析

python3爬虫系列08之新版动态智联招聘并存取数据库进行可视化分析

时间:2019-10-07 05:24:18

相关推荐

python3爬虫系列08之新版动态智联招聘并存取数据库进行可视化分析

python3爬虫系列08之新版动态智联爬取和存取数据库进行可视化分析

本篇是面向新版动态智联爬虫,数据存储到Mysql数据库,最后使用pyecharts读取并可视化分析。

在这之前,上一篇说的是

python3爬虫系列07之动态网页Json 数据,爬虫要怎么搞?

里面的实战是使用requests+json爬虫:根据输入词爬取豆瓣热门影片。

以及对json的分析和对文件的操作工具类:

json对象或json数组操作以及读写各类txt,csv,html,xls文件的工具类

1.前言

最近我查了一些现在的很多博客,慕课,腾讯课堂留下的关于爬取智联招聘岗位的代码,大部分都是老历史的,这个第一代版本的爬虫已经失效。

近期智联招聘的网站风格变化较快,这对于想爬取数据的人来说有些难受。

因此,在前人基础上,我重构了针对智联招聘网站的最新结构进行数据抓取的代码。

废话不多说,开始。

2.网页分析

(图是后配的,多少有些出入,但是不影响。)

进入智联招聘官网,在搜索界面输入‘java工程师’,(或者python,或者其他xxxx),然后界面跳转,

/?jl=551&sf=0&st=0&et=2&kw=java%E5%B7%A5%E7%A8%8B%E5%B8%88&kt=3

按F12查看网页源码,点击network

选中XHR,然后刷新网页。

可以看到一些Ajax请求, 找到画红线的XHR文件,点击可以看到网页的一些信息。

如图,点击Preview,可以看到我们所需要的信息就存在result中,这信息基本是json格式,有些是列表;

其次,在Header中有Request URL,就是真正的网页请求的地址。

那么如果要翻页的话,怎么办呢?

就需要通过找寻Request URL 的特点来分析具体变化的参数,和构造一个请求网址。

例如:

第一页:

https://fe-/c/i/sou?pageSize=90&cityId=530&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=python&kt=3&_v=0.12973194&x-zp-page-request-id=9bf58a63b73746ea9fd0cb8bd75560b9-1572848879239-667477&x-zp-client-id=0470c445-5e49-43bc-b918-0330e0ead9ee

第二页:

https://fe-/c/i/sou?start=90&pageSize=90&cityId=530&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=python&kt=3&_v=0.12973194&x-zp-page-request-id=9bf58a63b73746ea9fd0cb8bd75560b9-1572848879239-667477&x-zp-client-id=0470c445-5e49-43bc-b918-0330e0ead9ee

第三页:

https://fe-/c/i/sou?start=180&pageSize=90&cityId=530&workExperience=-1&education=-1&companyType=-1&employmentType=-1&jobWelfareTag=-1&kw=python&kt=3&_v=0.12973194&x-zp-page-request-id=9bf58a63b73746ea9fd0cb8bd75560b9-1572848879239-667477&x-zp-client-id=0470c445-5e49-43bc-b918-0330e0ead9ee

我们通过不同页面的URL对比,可以看到变化的参数是:

start 、cityId 、kw

对应,一猜就知道

起始页,城市名,岗位关键词

这样,我们就可以拼接URL,发起正确的翻页请求了。

其次,选择一个请求的URL,截取一段响应请求的json数据:

比如:

{“number”: “CC208131613J00164800114”, “jobName”: “python工程师”, “city”: “北京-顺义区”, “company”: “中都物流有限公司”, “welfare”: [“包吃”, “七险一金”, “交通补助”, “绩效奖金”, “通讯补助”], “workingExp”: “3-5年”, “salary”: “15K-20K”, “eduLevel”: “本科”}

(图片是后补的,但不影响字段分析)

可以从返回的字段中,选出我们需要的数据字典:

number 编号

jobName 岗位名称

city 城市地区

company 公司名称

workingExp 工作经验

salary 薪资范围

eduLevel 学历

好了,通过上述的分析,我们就知道了请求的URL格式,需要的参数,以及要提取的字段名称了。

3.撸码环节

下面我们通过Python爬虫来爬取上面的信息;

相关的解释统统放到代码中。

首先是要传入我们定义的参数:

地区、岗位名、页数

import requestsfrom urllib.parse import urlencode # 解决编码问题import jsonimport pymysqlif __name__=='__main__':cityName = str(input('请输入查找的地区:'))keyWord = str(input('请输入查找的职位关键字:'))needPage = int(input('请输入要爬取的页数(页/90条):'))# 控制爬取的页数for i in range(needPage):main(offset=90*i) # 分析url知首页是90开始的,翻页是其倍数。def main(offset):json_page = get_page(offset,cityName,keyWord) # 发送请求,获得json数据contentList = get_information(json_page) # 提取json数据对应的字段内容for content in contentList: # 循环持久化write_to_file(content)#save_data_sql(content) # 在数据库新建表以后在打开这个

然后开始循环,发送页面请求:

# 起始页,城市名,岗位词def get_page(offset,cityName,keyWord):# 有反爬,添加一下headerheaders = {'User - Agent': 'Mozilla / 5.0(Windows NT 6.1;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 73.0.3683.103Safari / 537.36'}#构建参数组params = {'start': offset,'pageSize': '90','cityId': cityName,'salary': '0,0','workExperience': '-1','education': '-1','companyType': '-1','employmentType': '-1','jobWelfareTag': '-1','kw': keyWord,'kt': '3','_v': '0.12973194','x-zp-page-request-id': '9bf58a63b73746ea9fd0cb8bd75560b9-1572848879239-667477','x-zp-client-id': '0470c445-5e49-43bc-b918-0330e0ead9ee'}base_url = 'https://fe-/c/i/sou?'url = base_url + urlencode(params) # 拼接url,要进行编码。print('爬取的URL为:',url)try:resp = requests.get(url,headers=headers,timeout=5)print(resp.text)if 200 == resp.status_code: # 状态码判断print(resp.json())return resp.json()except requests.ConnectionError:print('请求出错')return None

获得json数据,然后开始提取我们要的字段信息:

def get_information(json_page):if json_page.get('data'):results = json_page.get('data').get('results')print(results)for result in results:yield {#yield 是一个类似 return 的关键字,迭代一次遇到yield时就返回yield后面(右边)的值。'number':result.get('number'),# 编号'jobName': result.get('jobName'),#岗位名称'city': result.get('city').get('display'),# 城市地区'company': result.get('company').get('name'), # 公司名字# 'welfare':result.get('welfare'), #福利信息'workingExp':result.get('workingExp').get('name'), # 工作经验'salary':result.get('salary'), #薪资范围'eduLevel':result.get('eduLevel').get('name')#学历}print('success!')

提取完毕以后呢,就要循环持久化保存了:

# 本地备份爬取的数据def write_to_file(content):#print('dict:',type(content))with open('result.txt','a',encoding='utf-8') as f:#print(type(json.dumps(content)))f.write(json.dumps(content,ensure_ascii=False)+'\n') #将字典或列表转为josn格式的字符串

好了,完毕,运行一下。

结果如图:

各种各样的招聘信息:

好了,本篇关于python3爬虫系列08之新版动态智联爬虫和存取数据库进行可视化分析的第一部分,爬取智联招聘的内容就到这里了,这样我们就把智联招聘上对应的岗位信息抓取下了,并且存到了一个txt文件中。

什么?要源码?

嘿嘿~~~别急啊,咱们python3爬虫系列08之新版动态智联爬虫和存取数据库进行可视化分析,总有三个部分,接下来一篇是把爬取的数据保存到MySQL数据库中去,读取出来操作等等。。。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。