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在linux系统下获取系统内存使用情况的方法
May 11 Python
Python实现队列的方法
May 26 Python
Python实现数据库并行读取和写入实例
Jun 09 Python
Python探索之自定义实现线程池
Oct 27 Python
python中的插值 scipy-interp的实现代码
Jul 23 Python
pytorch permute维度转换方法
Dec 14 Python
Python实现SQL注入检测插件实例代码
Feb 02 Python
如何不用安装python就能在.NET里调用Python库
Jul 12 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
Python 实现try重新执行
Dec 21 Python
django配置app中的静态文件步骤
Mar 27 Python
Django在Model保存前记录日志实例
May 14 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数组应该有多大的分析
2009/07/30 PHP
php simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
Laravel 5.3 学习笔记之 错误&日志
2016/08/28 PHP
php微信公众号开发模式详解
2016/11/28 PHP
Zend Framework使用Zend_Loader组件动态加载文件和类用法详解
2016/12/09 PHP
thinkPHP5.0框架模块设计详解
2017/03/18 PHP
PHP simplexml_import_dom()函数讲解
2019/02/03 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
JS+CSS实现Div弹出窗口同时背景变暗的方法
2015/03/04 Javascript
JavaScript将字符串转换为整数的方法
2015/04/14 Javascript
浅析Bootstrap验证控件的使用
2016/06/23 Javascript
JavaScript 继承详解(五)
2016/10/11 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
详解Layer弹出层样式
2017/08/21 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
在Python中使用HTML模版的教程
2015/04/29 Python
Django 如何获取前端发送的头文件详解(推荐)
2017/08/15 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
如何使用Python进行OCR识别图片中的文字
2019/04/01 Python
详解python中*号的用法
2019/10/21 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
水电工程师岗位职责
2015/02/13 职场文书
初中班主任工作总结2015
2015/05/13 职场文书
优质护理心得体会
2016/01/22 职场文书
2019初中学生入团申请书
2019/06/27 职场文书
PostgreSQL存储过程实用脚本(二):创建函数入门
2021/04/05 PostgreSQL