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入门指引
Apr 01 Python
python中numpy基础学习及进行数组和矢量计算
Feb 12 Python
详解python 字符串和日期之间转换 StringAndDate
May 04 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
django js实现部分页面刷新的示例代码
May 28 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
python操作excel的包(openpyxl、xlsxwriter)
Jun 11 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
Python3将ipa包中的文件按大小排序
Apr 17 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
Jun 18 Python
Node.js 和 Python之间该选择哪个?
Aug 05 Python
python自动生成sql语句的脚本
Feb 24 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即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
jquery单选框radio绑定click事件实现方法
2015/01/14 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
jquery实现可自动判断位置的弹出层效果代码
2015/10/12 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
功能强大的Bootstrap组件(结合js)
2016/08/03 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
JavaScript实现省市县三级级联特效
2017/05/16 Javascript
详解用node搭建简单的静态资源管理器
2017/08/09 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
2018/11/08 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
python的launcher用法知识点总结
2020/08/07 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
Android面试题及答案
2015/09/04 面试题
给老师的检讨书
2014/02/11 职场文书
《小熊住山洞》教学反思
2014/02/21 职场文书
公司董事长岗位职责
2014/06/08 职场文书
植树造林的宣传标语
2014/06/23 职场文书
小学生安全教育广播稿
2014/10/20 职场文书
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL
Winsows11性能如何? win11性能测评多核竟比Win10差了10%
2021/11/21 数码科技