拉钩拉钩,你都不给我钩,我怎么拉呀

序言:号称爬虫界的喜马拉雅–拉钩,今天看看威力如何吧!!!
只是用作简单学习,想要获得大数据,请联系拉钩工程师。

一、打开网页,输入数据挖掘。右键查看源代码(谷歌浏览器),发现什么鸟数据都没有。猜测是Ajax请求。然后F12分析源码

打开在线解析json 点这里 ,把Response返回的JSON格式输入进去,看是不是我们想要的。

恩恩,是这个没错了。接下来就搞它。

二、点开Headers,发现是个post请求,url单独请求肯定请求不到。

果然出现报错:

三、分析原因
1)不愧是爬虫界大佬,连真实的浏览器都封杀。
2)没有添加POST请求,另开一网页的可能你的Cookie已经发生变化,浏览器识别不到。

一开始本来是post请求的,另起一网页的时候已经成为get请求,当然请求不到。

四、开始写爬虫,单纯的添加
https://www.lagou.com/jobs/positionAjax.json?px=default&needAddtionalResult=false 进行requets亲测不行。拉钩的机制要首先访问如下url
https://www.lagou.com/jobs/list_python?city=全国&cl=false&fromSearch=true&labelWords=&suginput=
获取其中的Cookie,再保持访问不中断的情况下,再请求下面那个url,这时的请求才会是post请求
https://www.lagou.com/jobs/positionAjax.json?px=default&needAddtionalResult=false

lagou.py

#添加包import random
import json
import requests
import timelagou=open('lagou.txt','w',encoding='utf-8')  #创建一个文本文档def req(page):first_url = 'https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput='second_url = "https://www.lagou.com/jobs/positionAjax.json?px=default&needAddtionalResult=false"#构造足够多的浏览器user_agent = ['Mozilla/5.0 (Windows NT 6.1; rv:50.0) Gecko/20100101 Firefox/50.0','Mozilla/5.0 (Windows NT 6.3; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0','Mozilla/5.0 (X11; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36','Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;  Trident/5.0)','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14','Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36','Mozilla/5.0 (iPad; CPU OS 10_1_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0 Mobile/14B100 Safari/602.1','Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:49.0) Gecko/20100101 Firefox/49.0','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0']num = random.randint(0, 9)           ##定义随机函数抽取浏览器访问user_agent = user_agent[num]  #给全所有的headersheaders={'Accept': 'application/json, text/javascript, */*; q=0.01','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9','Cache-Control': 'no-cache','Connection': 'keep-alive','Content - Length': '55','Content - Type': 'application / x - www - form - urlencoded; charset = UTF - 8','Host': 'www.lagou.com','Origin': 'https: // www.lagou.com','Pragma': 'no-cache','Referer': 'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=','User-Agent': str(user_agent),'X - Anit - Forge - Code': '0','X - Anit - Forge - Token': 'None','X - Requested - With': 'XMLHttpRequest'}#在给表单参数,由于在第一页中的first和之后几页的first不同,所以需要判断if page==1:datas={'first': 'true','pn': page,'kd': '数据挖掘'}else:datas = {'first': 'false','pn': page,'kd': '数据挖掘'}s=requests.Session()  #持续保持通信s.get(url=first_url,headers=headers,timeout=4)  #开始构造第一个请求,获取cookie,,first_url为get请求cookings=s.cookieshtml=s.post(url=second_url,headers=headers,data=datas,cookies=cookings,timeout=3)  #将得到的cookie继续请求senond_url,这样虽然会变得很慢,但是能爬time.sleep(5) #在停它5秒content=json.loads(html.text).get('content') #解析返回来的jsontxt=json.dumps(content,ensure_ascii=False) #转为字符串,而且设置编码lagou.write(txt)  #书写lagou.write('\n')req(page+1) #回调函数if __name__=='__main__':req(1)

经测试,爬成功了,但是不让你爬那么多。

继续分析原因,刚刚说的cookie还没解析,现在解析一下
复制第一页的cookie


第二页的cookie

第三页的cookie

第一种猜测,cookie的变化是根据时间戳来变化的。所以首先寻找看看有没有类似时间的标识。
为了更好的分析,建议放在Notepad++上

根据查看,猜测有个LGRID的好像是个时间戳,反正可以试一试。接下来我们改改代码,将这个LGRID给变掉

第二种代码测试,主要变化 LGRID={}-c36b5944-6ae8-11e9-9d75-5254005c3644’.format(time_now)
lagou2.py

import random
import json
import requests
import time
import datetimelagou=open('lagou3.txt','w',encoding='utf-8')def req(page):#url1 = 'https://www.lagou.com/jobs/list_python?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput='url = "https://www.lagou.com/jobs/positionAjax.json?px=default&needAddtionalResult=false"now=datetime.datetime.now()time_now = datetime.datetime.strftime(now, "%Y%m%d%H%M%S")user_agent = ['Mozilla/5.0 (Windows NT 6.1; rv:50.0) Gecko/20100101 Firefox/50.0','Mozilla/5.0 (Windows NT 6.3; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0','Mozilla/5.0 (X11; Linux x86_64; rv:50.0) Gecko/20100101 Firefox/50.0','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36','Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;  Trident/5.0)','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0.1 Safari/602.2.14','Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36','Mozilla/5.0 (iPad; CPU OS 10_1_1 like Mac OS X) AppleWebKit/602.2.14 (KHTML, like Gecko) Version/10.0 Mobile/14B100 Safari/602.1','Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:49.0) Gecko/20100101 Firefox/49.0','Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0','Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0']num = random.randint(0, 9)                                              ##定义随机函数user_agent = user_agent[num]  ##用随机函数抽取headers={'Accept': 'application/json, text/javascript, */*; q=0.01','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9','Cache-Control': 'no-cache','Connection': 'keep-alive','Content - Length': '55','Content - Type': 'application / x - www - form - urlencoded; charset = UTF - 8','Host': 'www.lagou.com','Origin': 'https: // www.lagou.com','Pragma': 'no-cache','Referer': 'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98?city=%E5%85%A8%E5%9B%BD&cl=false&fromSearch=true&labelWords=&suginput=','User-Agent': str(user_agent),'Cookie': '_ga=GA1.2.1961413520.1556520740; _gid=GA1.2.984667933.1556520740; user_trace_token=20190429145251-6869cc71-6a4b-11e9-9d71-5254005c3644; LGUID=20190429145251-6869d256-6a4b-11e9-9d71-5254005c3644; index_location_city=%E5%85%A8%E5%9B%BD; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2216a67fa96c9892-0e4867232d0006-f353163-2073600-16a67fa96caa58%22%2C%22%24device_id%22%3A%2216a67fa96c9892-0e4867232d0006-f353163-2073600-16a67fa96caa58%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_referrer%22%3A%22%22%2C%22%24latest_referrer_host%22%3A%22%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%7D%7D; showExpriedIndex=1; showExpriedCompanyHome=1; showExpriedMyPublish=1; hasDeliver=0; gate_login_token=a661a72fdc59201a3c22a6e0c00dee8e46ca580b086400dcf126b850be079fad; JSESSIONID=ABAAABAABEEAAJA691A0490443480B6ED7BB57C7EE3D0DC; Hm_lvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1556521510,1556525367,1556528678,1556587987; _putrc=0FC421A9B1CA2D98123F89F2B170EADC; login=true; unick=BigCattle; TG-TRACK-CODE=search_code; SEARCH_ID=20ec5487a99b4ba58e32f1815e697112; X_HTTP_TOKEN=cd70870137bb6d2c5538856551f368de23b153d3c0; Hm_lpvt_4233e74dff0ae5bd0a3d81c6ccf756e6=1556588324; LGRID={}-c36b5944-6ae8-11e9-9d75-5254005c3644'.format(time_now),'X - Anit - Forge - Code': '0','X - Anit - Forge - Token': 'None','X - Requested - With': 'XMLHttpRequest'}if page==1:datas={'first': 'true','pn': page,'kd': '数据挖掘'}else:datas = {'first': 'false','pn': page,'kd': '数据挖掘'}html=requests.post(url=url,headers=headers,data=datas,timeout=3)time.sleep(7)#print(html.text)content=json.loads(html.text).get('content')print(content)wr=json.dumps(content,ensure_ascii=False)lagou.write(wr)lagou.write('\n')req(page+1)if __name__=='__main__':req(1)

哈哈,一样可以成功,但是,拉钩超坏,都不给我爬超过50条。但是能爬还是挺开心的。

爬多数据的话,给个思路:
1、ip代理池是必须的了(真的花钱买的那种,不是网上随便抓的那种,不然没用),而且拉钩有一个机制是识别ip的。
2、拉钩数据的获取最重要的是cookie的构造,我猜测每个登录进拉钩的cookie,拉钩在后台都有一个记录机制,别说是爬虫了,就算是真是浏览器,拉钩都不给你看,还能不能好好的玩耍了??

3、我觉得拉钩另外还有一层,除了positionAjax.json之外,拉钩肯定还会有其他的json多个集中在一起的构造,之后有时间在lu它。就像解析会员视频的加密信息一样,要花的时间太多了。但是,爬虫不能投降

4、以上纯属瞎编。如有影响,立即删除!

我的大数据之路--2019拉钩网爬取(破解反爬虫)相关推荐

  1. 浅谈一个新人的大数据之路

    CCCCCold丶大数据之禅 第一章,大数据之路浅谈 数仓&数据集市&数据湖 数据模型 模型ETL频率: 模型存储技术: 模型数据分层: 模型架构分层: 模型主题域: 模型创建类型: ...

  2. 读《大数据之路-阿里巴巴大数据实践》数据模型篇笔记

    读<大数据之路-阿里巴巴大数据实践>数据模型篇 七 建模综述 OLTP 面向数据 随机读写 3NF OLAP 批量读写 不关注一致性更关心数据整合 ER模型–衍生出dataVault 维度 ...

  3. 基于OneData的数据仓库建设(阿里巴巴大数据之路)

    目录 1- 指导思想 2- 数据调研 2.1- 业务调研 2.2- 需求调研 3- 架构设计 3.1- 数据域的划分 3.2- 构建总线矩阵 4- 指标体系搭建 4.1- 基本概念 4.2- 操作细则 ...

  4. 商业银行大数据之路三部曲1:去IOE

    商业银行大数据之路三部曲1:去IOE 商业银行大数据之路三部曲2:数据治理 商业银行大数据之路三部曲3:智能化 -------------------------------------------- ...

  5. 数据仓库进阶 《阿里大数据之路》第二篇 数据模型篇 (完整版)

    第8章 大数据领域建模综述 此文章为学习笔记,有兴趣的小伙伴可以根据以下指引获取更多,学习内容链接如下: 视频:[一起啃书]阿里大数据之路数据仓库建模基础理论研读(已完结)_哔哩哔哩_bilibili ...

  6. 大数据之路读书笔记-10维度设计

    大数据之路读书笔记-10维度设计 文章目录 大数据之路读书笔记-10维度设计 10.1 维度设计基础 10.1.1 维度的基本概念 10.1.2 维度的基本设计方法 10.1.3 维度的层次结构 10 ...

  7. 数据仓库理论进阶 - 01 《阿里大数据之路》第二篇数据模型篇

    第8章 大数据领域建模综述 此文章为学习笔记,有兴趣的小伙伴可以根据以下指引获取更多,学习内容链接如下: 视频:[一起啃书]阿里大数据之路数据仓库建模基础理论研读(已完结)_哔哩哔哩_bilibili ...

  8. 《工业大数据白皮书》2019版正式发布

    来源:悟空智能科技 近日,由中国电子技术标准化研究院.全国信息技术标准化技术委员会大数据标准工作组主编,工业大数据产业应用联盟联合主编,联想集团等多家联盟成员企业参编的<工业大数据白皮书(201 ...

  9. 阿里巴巴大数据之路——数据模型篇

    阿里巴巴大数据之路--数据模型篇 一.概述 1.什么是数据模型? 数据模型就是数据的组织和存储方法.主要关注的是从业务.数据存取和使用角度合理存储数据. 2.典型数据仓库建模方法论 ER模型 纬度模型 ...

  10. CCF受理“大数据专家委员会”2019年委员与通讯委员申请

    中国计算机学会(CCF)于2012年10月由李国杰院士牵头成立大数据专家委员会(CCF Task Force on Big Data,以下简称:大数据专委会).区别于专业委员会,大数据专委会是CCF成 ...

最新文章

  1. 史上最全的ubuntu16.04安装nvidia驱动+cuda9.0+cuDnn7.0
  2. BZOJ 3101: N皇后 构造
  3. SAP实施后你的关键用户还关键吗?
  4. linux c++ 运行时报 段错误 的一个原因
  5. 开始时间小于 结束时间 js_DNF分享红包开始及结束时间 红包有什么奖励相关介绍...
  6. 使用JMeter创建数据库(Mysql)测试
  7. long mode 分页_在Spring Boot中使用Spring-data-jpa实现分页查询(转)
  8. 另一个角度看Java常量池
  9. Unity教程之-Unity Attribute的使用总结
  10. 一只Quant菜鸟的修行之路
  11. 柴静《看见》读书笔记
  12. Unity3D FingerGestures 手势插件使用
  13. Android 6.0/7.0权限
  14. esxi中利用ovf模板迁虚拟机
  15. mysql中字段长度到底是字符数还是字节数?
  16. 线性回归基础相关公式
  17. python 词语频率统计_计算词和词组频率的Python nltk
  18. java 排版快捷键_Eclipse自动排版快捷键失效(转)
  19. mysql 烂泥,烂泥:学习mysql的binlog配置
  20. LeetCode题解(0592):分数加减运算(Python)

热门文章

  1. opencv:图像的读取和显示
  2. vue提示音_VueJS 实现管理后台新订单的语音提醒
  3. php fpm 测试,php-fpm – 配置详解(转)
  4. 《专业创新实践Ⅱ》大作业 LeNet在眼疾识别数据集iChallenge-PM上的应用
  5. dnf 台服服务器pvf修改器,求教怎么用pvf修改器自制装备
  6. java——jui的应用
  7. win10系统服务器怎样设置密码,win10系统的电脑如何给普通文件夹设置密码
  8. 元宇宙虚拟人迎来高峰期,哪个是你的最爱?
  9. Safari 14.0 版本安装json插件
  10. java实用教程第五版_java2实用教程(第5版)重要点及遗漏点(一)