当前位置:   article > 正文

爬虫项目-----拉勾网职位需求采集项目_拉勾 采集 headers 构建

拉勾 采集 headers 构建

拉勾网职位需求采集项目

需求:
通过python抓取拉钩网的招聘详情,python岗位要求。

一、职位需求页面分析

- 拉钩网项目与前面爬虫项目的不同点:
之前项目是get请求,拉钩网项目是post请求。
get是要获取这个信息,post是获取这个信息的同时,在上传一部分参数。

在爬取三国演义小说时,我们是先爬取目录页内容,得到章节名和详情页链接;再通过分析去访问详情页链接获取详情页内容。
但在拉钩网项目中,原html代码中是找不到详情页链接的,此时我们需要通过分析XHR对象来获取需求。
- 页面分析:
进入拉钩网官网,输入python出现所有相关的职位,点击每一个职位进去分析每个职位详情页的网址特点。
通过观察可以发现,拉勾网的职位页面详情是由 http://www.lagou.com/jobs/ PositionId.html 组成。
在这里插入图片描述
而 PositionId 可以通过分析 Json 的 XHR 获得。
在这里插入图片描述

在这里插入图片描述
知道了数据的源头,接下来就按照常规步骤包装 Headers ,提交 FormData 来获取反馈数据。

二、PositionId 数据采集

注意:

  • 拉勾网反爬虫做的比较严,请求头多添加几个参数才能不被网站识别。
  • 我们找到真正的请求网址,发现返回的是一个 JSON 串,解析这个 JSON 串即可,而且注意是 POST传值,通过改变 Form Data 中 pn 的值来控制翻页。
  • XHRXMLHttpRequest对象 用于和服务器交换数据。

当我们进入开发者模式,点击网络,XHR获取响应后
这个请求里面包含了
真实的URL( 浏览器上的 URL 并没有职位数据,查看源代码就可以发现这一点)、
POST 请求的请求头Headers 、
POST 请求提交的表单 Form Data (这里面包含了页面信息 pn 、搜索的职位信息 kd )

真实的URL获取:
在这里插入图片描述
请求头信息
我们需要构造的请求头Headers信息,如果这里没有构造好的话,容易被网站识别为爬虫,从而拒绝访问请求。
在这里插入图片描述
表单信息
发送POST请求时需要包含的表单信息 Form Data
在这里插入图片描述
返回的JSON数据
发现需要的职位信息在 content –> positionResult –> result 下,其中包含了工作地点、公司名、职位等信息。 我们只需要保存这个数据就可以了。
在这里插入图片描述

三、项目代码

1.先获取拉钩网所有岗位API接口的响应信息(response)
通过post并传入参数和数据访问url:https://www.lagou.com/jobs/positionAjax.json?=false
2.在获取的页面解析我们需要的所有岗位的ID号,yeild返回。
3.把ID传进解析岗位详情的函数里,先下载岗位详情页面,然后解析我们想要的岗位要求信息。

import time

import requests
from fake_useragent import UserAgent
from lxml import etree

ua = UserAgent()

def download_positions(kd="python", city="西安", page=1):
    """
    获取拉勾网所有的岗位API接口的响应信息

    :param kd: 岗位名称/关键字
    :param city: 城市
    :param page: 页码
    :return: position_id
    """
    # 拉勾网访问的网址,并不是Ajax的网址
    # old_url = 'https://www.lagou.com/jobs/list_python'
    # 真实的API接口的网址(通过F12开发者模式分析出来的)
    url = 'https://www.lagou.com/jobs/positionAjax.json?=false'
    # url提交的参数信息, http://xxxxx/?param1=value1&param2=value2
    params = {
   
        'city': city,
        # 'needAddtionalResult': 'false',
    }
    # url以POST方式提交的信息(参数分析出来的)
    data = {
   
        # 'first': 'true',
        'pn': page,
        'kd': kd
    }
    # 头部信息, 为了防止拉钩反爬策略的
    headers = {
   
        'UserAgent': ua.random,
        'Host': 'www.lagou.com',
        'Origin': 'https://www.lagou.com',
        'TE': 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/939837
推荐阅读
相关标签
  

闽ICP备14008679号