拉钩JSON数据爬取

步骤分析

  1. 访问URL地址
  2. 查看网页源代码发现职位信息为动态加载
  3. 通过开发者工具查看xhr请求,发现json数据地址为https://gate.lagou.com/v1/neirong/positions/mark_info?positionIds=......,将地址复制到浏览器,出现您操作太频繁,请稍后访问之类的数据,无法查看完整数据
  4. 向web中的地址发送请求,获取cookiessession信息
  5. 使用POST方式将之前获取的cookiessessionheaders作为参数,重新向真实的json数据地址发送请求
  6. 获取到json数据
  7. 通过json.loads()json数据装换成python字段的数据类型,方便解析

具体代码如下:

import requests
import time


def main(pages):
    # 通过访问主网页获取cookies和session
    url1 = 'https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput='
    # 提交ajax请求,获取json数据
    url = "https://www.lagou.com/jobs/positionAjax.json?px=default&needAddtionalResult=false"
    # 请求头
    headers = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
        'Referer': 'https://www.lagou.com/jobs/list_python?px=default&city=%E5%85%A8%E5%9B%BD',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
        'Host': 'www.lagou.com'
    }

    # 使用data来决定获取多少页的json数据
    for page in range(1, pages):
        data = {
            'first': 'false',
            'pn': page,
            'kd': 'python'
        }
        s = requests.Session()  # 建立session
        s.get(url=url1, headers=headers, timeout=3)
        cookie = s.cookies  # 获取cookie
        respon = s.post(url=url, headers=headers, data=data, cookies=cookie, timeout=3)
        time.sleep(4)
        print(respon.text)
        
# 获取前两页的职位json信息
main(3)
# 结果如下:
# {"resubmitToken":null,"requestId":null,"msg":null,"success":true,"content":{"hrInfoMap":{"6187967":{"userId":11765418,"phone":null,"positionName":"招聘经理",........."pageSize":15},"code":0}

你可能感兴趣的:(爬虫)