python使用requests库爬取拉勾网招聘信息的实现


Posted in Python onNovember 20, 2020

按F12打开开发者工具抓包,可以定位到招聘信息的接口

python使用requests库爬取拉勾网招聘信息的实现

在请求中可以获取到接口的url和formdata,表单中pn为请求的页数,kd为关请求职位的关键字

python使用requests库爬取拉勾网招聘信息的实现

python使用requests库爬取拉勾网招聘信息的实现

使用python构建post请求

data = {
  'first': 'true',
  'pn': '1',
  'kd': 'python'
}

headers = {
  'referer': 'https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput=',
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}

res = requests.post("https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false", data=data,headers=headers)
print(res.text)

发现没有从接口获取到数据

python使用requests库爬取拉勾网招聘信息的实现

换了个网络后接口还是会返回操作频繁的错误信息,仔细检查后发现这个接口需要一个动态的cookies不然会一值返回错误频繁

data = {
  'first': 'true',
  'pn': '1',
  'kd': 'python'
}

#头部中必须有user-agent和referer不然不会返回cookies
headers = {
  'referer': 'https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput=',
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}

#通过访问主页获取cookies
r1= requests.get("https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput='",headers=headers)

#再post请求中传入cookies
r2 = requests.post("https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false", data=data,headers=headers, cookies=r2.cookies)
print(r2.text)

注意!每请求十次接口cookies也会刷新一次,下面贴上完整爬虫代码

import json
import logging

import requests

#获取cookie
def getCookie():
  res = requests.get("https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput=",
        headers=headers)
  return res.cookies

#获取json数据
def getPage(i, cookies, kw):
  data = {
    'first': 'true',
    'pn': i,
    'kd': kw
  }
  res = requests.post("https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false", data=data,
             headers=headers, cookies=cookies)
  return json.loads(res.text)

#合并列表
def reduceList(l):
  text = ""
  for i in l:
    text += i + " "
  return text.strip()

#提取字段并保存到文件中
def saveInCsv(f, data):
  js = data["content"]["positionResult"]["result"]
  for node in js:

    # 对空值进行处理
    district = node["district"]
    if district != None:
      district = "-" + district
    else:
      district = ""

    f.write(
      node["positionName"] + "·" + node["city"] + district + "·" + node[
        "salary"] + "·" +
      node["workYear"] + "·" + node["education"] + "·" + reduceList(node["skillLables"]) + "·" +
      node["companyShortName"] + "·" + node["companySize"] + "·" + node["positionAdvantage"] + "\n")

if __name__ == '__main__':
  #定义头部
  headers = {
    'referer': 'https://www.lagou.com/jobs/list_python/p-city_0?&cl=false&fromSearch=true&labelWords=&suginput=',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
  }

  #初始化cookie
  cookies = getCookie()

  with open("file.csv", "w", encoding="utf-8") as f:
    for i in range(1, 31):
      #每十个请求重新获取cookie
      if (i % 10 == 0):
        cookies = getCookie()

      #解析字段并存储
      data = getPage(i, cookies, "python")
      saveInCsv(f, data)

到此这篇关于python使用requests库爬取拉勾网招聘信息的实现的文章就介绍到这了,更多相关python requests爬取拉勾网内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中list列表的一些进阶使用方法介绍
Aug 15 Python
python操作列表的函数使用代码详解
Dec 28 Python
Python 读取指定文件夹下的所有图像方法
Apr 27 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
Feb 22 Python
python读写csv文件实例代码
Jul 05 Python
利用python list完成最简单的DB连接池方法
Aug 09 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 Python
Python监听剪切板实现方法代码实例
Nov 11 Python
pandas实现导出数据的四种方式
Dec 13 Python
MATLAB 如何求取离散点的曲率最大值
Apr 16 Python
Python作用域和名称空间的详细介绍
Apr 13 Python
python爬取天气数据的实例详解
Nov 20 #Python
python爬取招聘要求等信息实例
Nov 20 #Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 #Python
Python getsizeof()和getsize()区分详解
Nov 20 #Python
Python析构函数__del__定义原理解析
Nov 20 #Python
Python request post上传文件常见要点
Nov 20 #Python
接口自动化多层嵌套json数据处理代码实例
Nov 20 #Python
You might like
php的sprintf函数的用法 控制浮点数格式
2014/02/14 PHP
php格式化日期和时间格式化示例分享
2014/02/24 PHP
Nigma vs AM BO3 第二场2.13
2021/03/10 DOTA
[JS]点出统计器
2020/10/11 Javascript
javascript与CSS复习(二)
2010/06/29 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
jQuery如何防止这种冒泡事件发生
2015/02/27 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
JS中使用FormData上传文件、图片的方法
2016/08/07 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
基于canvas的二维码邀请函生成插件
2017/02/14 Javascript
Angularjs 手写日历的实现代码(不用插件)
2017/10/18 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
jquery将json转为数据字典的实例代码
2019/10/11 jQuery
python str与repr的区别
2013/03/23 Python
python实现分页效果
2017/10/25 Python
Python requests库用法实例详解
2018/08/14 Python
Django管理员账号和密码忘记的完美解决方法
2018/12/06 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
2019/06/13 Python
python实现最大优先队列
2019/08/29 Python
使用Python打造一款间谍程序的流程分析
2020/02/21 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
高山背包:High Sierra
2017/11/23 全球购物
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
环境科学毕业生自荐信
2013/11/21 职场文书
如何写自我评价?自我评价写什么好?
2014/03/14 职场文书
社会实践活动总结范文
2014/07/03 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
演讲开头怎么书写?
2019/08/06 职场文书
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js
浅谈CSS不规则边框的生成方案
2021/05/25 HTML / CSS