爬虫项目-----拉勾网职位需求采集项目

文章目录

  • 拉勾网职位需求采集项目
    • 一、职位需求页面分析
    • 二、PositionId 数据采集
    • 三、项目代码

爬虫项目-----拉勾网职位需求采集项目

拉勾网职位需求采集项目

需求:
通过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¶m2=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': 
版权声明:如无特殊标注,文章均来自网络,本站编辑整理,转载时请以链接形式注明文章出处,请自行分辨。

本文链接:https://www.shbk5.com/dnsj/75471.html