zoukankan      html  css  js  c++  java
  • Python爬取拉钩招聘网数据

    0 需求

    爬取拉勾网(https://www.lagou.com/)上与“嵌入式软件”关键字有关的职位信息。

    1 分析

    在网页的源代码中搜索我们所要的信息(公司名称等),无匹配,说明是数据动态获取的

    打开检查工具,重新刷新网页,从Network下抓取到的包中找到返回数据的包。(可以使用XHR和JS标签过滤)

    到这里基本上是成功了一半了,剩下的就要看网站的反爬机制有多给力了

    我们切换到Headers标签看这个数据包的头部信息:

    请求的URL:https://www.lagou.com/jobs/positionAjax.json?px=default&city=%E5%8C%97%E4%BA%AC&needAddtionalResult=false

    请求的方式:POST(与GET相比,请求数据是在FormData中,可能有加密)

    (这里比较良心,类似没有加密的数据)

    请求头:有可能需要加上,cookies有可能会制造麻烦/(ㄒoㄒ)/~~

     

    分析到这,就可以开始写代码了,遇到问题解决问题(ง •_•)ง

    2 爬取

    一开始肯定要假设它没有设置什么反爬机制,写好URL、Headers和FormData,直接调用requests.post()

    过程我就不多叙述了,直接说遇到的问题:我们如上操作后会发现返回的数据是“您访问太频繁了”

    但事实上我们根本就没有访问很频繁,这便是网站设置的反爬机制,这种现象的专业名词叫——投毒

    FormData既然没有加密数据,那么可以判定问题基本上是出在cookie上了

    既然用固定的cookie不行,通过http请求和cookie的交互过程,我们就必须找到set-cookie的过程

    (图片来源:https://www.cnblogs.com/fanying/p/11650034.html

    重新回到拉勾网的页面,清除掉现有的cookie(我是chrome,方法如下)

     

     这时我们再刷新一下页面,分析抓到的包(找set-cookie的包啊(๑•̀ㅂ•́)و✧)

     你得找到这个包啊,注意名字不一定是这个,但是一定是有Set-Cookie参数的啊

    得到了cookie了,剩下的简单了,可以封装一个函数执行一个get请求获取cookie,将返回的cookie加入post请求的参数,就能获取到你想要的数据了

    3 数据的处理

    得到了数据,按理说我们要对数据进行筛选-提取,这里我没有特别的需求,仅仅是为了学习,就直接存一些关键信息到csv文件吧。

    需要的可以用pandas、pycharts等工具进行可视化处理。

    4 代码

    # -*- encoding: utf-8 -*-
    '''
    @File    :   lagou.py
    @Time    :   2020/03/30 22:12:38
    @Author  :   bAdblocks 
    @Version :   1.0
    @Contact :   betterWL@hotmail.com
    '''
    
    # here put the import lib
    import json
    import requests
    import pprint # 格式化打印
    
    url = "https://www.lagou.com/jobs/positionAjax.json?px=default&city=%E6%B7%B1%E5%9C%B3&needAddtionalResult=false"
    headers = {
    # "Cookie": getCookie(),
    "Host": "www.lagou.com",
    "Origin": "https://www.lagou.com",
    "Referer": "https://www.lagou.com/jobs/list_%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6/p-city_215?px=default", # 防盗链
    "Sec-Fetch-Dest": "empty",
    "Sec-Fetch-Mode": "cors",
    "Sec-Fetch-Site": "same-origin",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36",
    "X-Anit-Forge-Code": "0",
    "X-Anit-Forge-Token": "None",
    "X-Requested-With": "XMLHttpRequest"
    }
    
    form_data = {
    "first": "false",
    "pn": "1",# 页码
    "kd": "嵌入式软件"
    }
    
    def getCookie():
        cookie_url = "https://www.lagou.com/jobs/list_%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%BD%AF%E4%BB%B6/p-city_215?px=default"
        cookie_headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400"
        }
        cookie_r = requests.get(cookie_url,headers=cookie_headers)
    
        return cookie_r.cookies
    
    cookies = getCookie()
    
    r = requests.post(url=url, data=form_data, headers=headers,cookies=cookies)
    print(r.text)
    
    data
    = r.json() with open('职位信息.csv',mode="w+",encoding="utf-8") as f: header = ['职位名称', '公司全称', '公司规模', '薪资'] f.write(','.join(header)) f.write(' ') for item in position_data: d = [item['positionName'], item['companyFullName'],item['companySize'], item['salary']] f.write(','.join(d)) f.write(' ')

  • 相关阅读:
    sublime-生成html1.0
    sublime代码片段
    单色半透明-兼容IE7
    IE
    身心被掏空
    屏幕适配的方法
    宫格布局实例(注意jquery的版本号要统一)
    宫格布局实例(注意jquery的版本号要统一)2
    有 n个整数,使其前面各数顺序向后移 m 个位置,最后m个数变成最前面的 m 个数。
    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
  • 原文地址:https://www.cnblogs.com/Irvingcode/p/12616467.html
Copyright © 2011-2022 走看看