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

本文介绍了如何使用Python3爬虫抓取新版动态智联招聘的岗位信息,解析JSON数据,存储到MySQL数据库,并进行可视化分析。通过分析网页结构,发现关键参数并构造翻页URL,提取所需字段,最终实现信息的爬取和持久化。
摘要由CSDN通过智能技术生成

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

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

在这之前,上一篇说的是
python3爬虫系列07之动态网页Json 数据,爬虫要怎么搞?

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

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

1.前言

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

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

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


废话不多说,开始。

2.网页分析

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

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

https://sou.zhaopin.com/?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-api.zhaopin.com/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-api.zhaopin.com/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-api.zhaopin.com/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 requests
from urllib.parse import urlencode  # 解决编码问题
import json
import pymysql


if __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):

    # 有反爬,添加一下header
    headers = {
        '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-api.zhaopin.com/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数据库中去,读取出来操作等等。。。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江湖一点雨

原创不易,鼓励鼓励~~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值