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实现简单截取中文字符串的方法
Jun 15 Python
python版简单工厂模式
Oct 16 Python
Python之批量创建文件的实例讲解
May 10 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
python三方库之requests的快速上手
Mar 04 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
Jun 17 Python
Python OrderedDict的使用案例解析
Oct 25 Python
Python读取实时数据流示例
Dec 02 Python
Python使用pyexecjs代码案例解析
Jul 13 Python
python 用opencv实现霍夫线变换
Nov 27 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 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动态生成静态HTML网页的代码
2010/03/04 PHP
php目录操作函数之获取目录与文件的类型
2010/12/29 PHP
PHP程序员基本要求和必备技能
2014/05/09 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
2017/06/11 PHP
使用PHP反射机制来构造"CREATE TABLE"的sql语句
2019/03/21 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
JS+flash实现chrome和ie浏览器下同时可以复制粘贴
2013/09/22 Javascript
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
轻量级jQuery插件slideBox实现带底栏轮播(焦点图)代码
2016/03/28 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
详谈js遍历集合(Array,Map,Set)
2017/04/06 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
2018/10/01 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
使用Python测试Ping主机IP和某端口是否开放的实例
2019/12/17 Python
Python 生成VOC格式的标签实例
2020/03/10 Python
python轮询机制控制led实例
2020/05/03 Python
python爬虫scrapy基于CrawlSpider类的全站数据爬取示例解析
2021/02/20 Python
将HTML5 Canvas的内容保存为图片借助toDataURL实现
2013/05/20 HTML / CSS
怎样声明接口
2014/09/19 面试题
优秀员工年终发言演讲稿
2014/01/01 职场文书
爱护公共设施标语
2014/06/24 职场文书
三严三实学习心得体会
2014/10/13 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
何玥事迹观后感
2015/06/16 职场文书
幼儿园教学反思范文
2016/03/02 职场文书