Python3网络爬虫之requests动态爬虫:腾讯招聘

腾讯招聘之存入mysql数据库

大数据时代,已不局限于书面了解世界,而是通过物联网达到足不出户眺望远方。这次小编带大家来看看另一种爬虫技术:动态爬虫,不同于之前两篇的静态爬虫,数据不存在于网页源码中,而是由Ajax渲染的接口数据。我们将通过“腾讯招聘”爬虫来了解这方面的知识。

操作环境: Windows10、Python3.6、Pycharm、谷歌浏览器
目标网址: https://careers.tencent.com/search.html?pcid=40001

===============================================================

================================================

1、摘要

 1.1、Ajax简介

  我们与网站服务器通信的唯一方式,就是发出HTTP请求获取新页面。如果提交表单之后,或从服务器获取信息之后,网站的页面不需要重新刷新,那么你访问的网站就在用Ajax技术。
  Ajax其实并不是一门语言,而是用来完成网络任务(可以认为它与网络数据采集差不多)的一系列技术。Ajax全称是Asynchronous JavaScript and XML(异步JavaScript和XML),网站不需要使用单独的页面请求就可以和网络服务器进行交互(收发信息)
  Ajax是利用JavaScript在保证页面不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。适用于GET、POST、DELETE等请求,服务器返回的XML、HTML、JSON等文本。

 1.2、爬虫思路

  1.获取目标网址的列表页中渲染的json数据;
  2.拼接完整的详情链接;
  3.请求并提取详情页数据。


2、分析网页

  目标网址:
在这里插入图片描述

  当我们想对目标网址进行爬取时,首先考虑的不是立即写代码测试该网站,而是先判断其是何种数据。有时候使用requests程序进行爬取时,会发现获取的结果与浏览器展示的数据不一致。即获取的数据在源代码中不存在,而是经过JavaScript处理,由Ajax加载于接口中存在。
在这里插入图片描述

  如今的科技技术蓬勃发展,由Web发展趋势来看,越来越多的网页都将通过Ajax加载来呈现数据,即网页数据加载是一种异步加载的方式,网页本身不包含与这些数据,而是在初始化页面后自动通过向服务器发送Ajax请求,然后从服务器获取响应数据之后在渲染到网页上。

  那么该如何获取Ajax渲染加载的数据呢?接下来就先找到其加载渲染的数据接口步骤如下:
  1.右键点击检查,或F12打开开发者模式;
  2.选择Network;
  3.点击XHR(一般接口数据都在这寻找);
  4.Name中寻找目标接口;
  5.Privew与Response,其中一个皆为链接返回的数据;
  6.判断数据是否来自当前找到的目标接口。
在这里插入图片描述

3、参数了解

 3.1、请求的区分

  学过前端的小伙伴都了解,服务器发送的请求有Get和Post等几种,其中requests模块中发送请求有data、params两种携带参数的方法,而params在get请求中使用,data在post请求中使用。

  两者的区分在于params是添加到url的请求字符串中的,用于get请求。
而data是添加到请求体(body)中的,用于post请求。当前的腾讯招聘便是Get请求的params参数,而Post请求的data参数小编会在下一篇博客中介绍,敬请期待后续!
在这里插入图片描述

 3.2、时间戳

  params表单中的第一个timestamp参数字面意思是时间戳,如何确认它是不是一个时间戳呢?首先百度一个url编码网站,找到Unix时间戳转换即可查看,需要注意的是参数里的数字是13位,转换时只需要前十位即可(去掉后三位)。
在这里插入图片描述
  确定其为时间戳后,首先导入内置模块-时间模块:import time (注:转转换翻译的时候是十位整数,但作为参数请求的时候是十三位整数),

import time
# 时间戳
timestamp = int(time.time()*1000)
print(timestamp)

  time.time()获取的时间戳为小数,将其*1000达到13位整数后用int()函数去掉去除的小数即可。
在这里插入图片描述

 3.3、categoryId参数

  params表单里的categoryId参数是职业类别对应的招聘类型的分类,想获取哪方面的职位,点击其位置,categoryId参数便会改变,但勾选职位分类之后categoryId参数是固定的。

技术类别:在这里插入图片描述
技术+设计分类:在这里插入图片描述
这里我们只勾选技术的分类,获取这些岗位信息。

4、提取数据

  分析完网页,下一步开始写程序代码。首先导入相关的库,以及写好请求头,为你的程序伪造身份。后续需要用到其他模块再进行导入。

import requests
import time
import json
import re

# 请求头,伪造身份
headers = {
   
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
}

 4.1、构建params

  除去params表单中空字符的参数,前面介绍过的岗位categoryId参数是固定不变的外,时间戳timestamp参数和pageIndex参数是翻页页数,这是每次请求都会改变的参数。

  因为每次翻页请求都会用到params表单,所以定义一个函数来放置params表单,以便调用。

def get_params(pn):  # pn 页数
    params = {
   
        "timestamp": str(int(time.time() * 1000)),  # 时间戳
        "countryId": "",
        "cityId": "",
        "bgIds": "",
        "productId": "",
        "categoryId": "40001001,40001002,40001003,40001004,40001005,40001006",  # 技术岗位分类
        "parentCategoryId": "",
        "attrId": "",
        "keyword": "",
        "pageIndex": str(pn),   # 页数
        "pageSize": "10",   # 每页固定十条招聘岗位
        "language": "zh-cn",
        "area": "cn",
    }

    return params

 4.2、请求列表页

  从目标网址可看出,技术分类岗共有274页数据信息。两种代码实现方式:

  for循环: 自己定义翻页的页数循环。

for pn in range(1
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值