cookies应对python反爬虫知识点详解


Posted in Python onNovember 25, 2020

在保持合理的数据采集上,使用python爬虫也并不是一件坏事情,因为在信息的交流上加快了流通的频率。今天小编为大家带来了一个稍微复杂一点的应对反爬虫的方法,那就是我们自己构造cookies。在开始正式的构造之前,我们先进行简单的分析如果不构造cookies爬虫时会出现的一些情况,相信这样更能体会出cookies的作用。

网站需要cookies才能正常返回,但是该网站的cookies过期很快,我总不能用浏览器开发者工具获取cookies,然后让程序跑一会儿,每隔几分钟再手动获取cookies,再让程序继续跑吧。如果反复这样工作,那么写爬虫也就没意义了。便开始对cookies进行分析。

从浏览器的开发者工具获取到的cookies大约有10个字段,经过反复测试,能让网站正常返回的只需要两个字段,分别为__jsluid_h=011a522dbxxxxxxxxc1ce59d336e5e60和__jsl_clearance=1581880640.794|0|trTB4c6b%2BZpvxxxxxxxx8YqCOOo%3D (中间打码处理)。

 经过测试,如果请求的时候不自己构造cookies,默认会返回__jsluid_h :

cookies应对python反爬虫知识点详解

先尝试了将那段js脚本保存下来,包装成一个html文件打开,发现浏览器不停的刷新,也并没起什么作用。那就分析一下js脚本,原来的代码是单行的,自己整理一下并加了一些变量名和log,大概是这么个样子: 

cookies应对python反爬虫知识点详解

将第16行的变量cmd打印出来看看,发现是另一段类似的脚本:

cookies应对python反爬虫知识点详解

可以看到第二段脚本已经开始设置cookies的__jsl_clearence 字段了。这些显然就是混淆后的js脚本,但是分析到这里也就大概弄明白了从发送请求到网站返回是怎么回事。之所以在本地跑这段代码会不断刷新,是因为第二行的setTimeout会让其在1.5秒后重新请求,但是我们本地没有服务处理请求让其停止,所以会不断的刷新。

而第一段脚本当中,变量y是完整的js代码 ,代码中的变量名和关键字被进行编码了,变量x存储的是用来替换的变量名和关键字,后面是解码函数。所以现在的问题变成了获取第一段脚本当中的cmd代码,执行后再获取第二段代码的document.cookie的内容即可。

可是对于python和js的交互我完全没接触过,尝试了PyExecJS和Js2Py,都没办法正常执行第一段脚本。无奈之下,我用python复现了第一段脚本,然后用Js2Py获取了cookie。在请求一次过后,构造cookies,再请求一次,就可以了:

def test():
  url = REQUEST_URL
  # url = 'https://www.baidu.com'
  request_header = get_header()
  html = requests.get(url, headers=request_header)
  print(html)
  jscode = html.text
  # print(jscode)
  # tryjs.get_cookies()为复现的js代码,以及用Js2Py获取cookies的代码
  request_cookies = try_js.get_cookies(jscode)
  request_cookies += ';__jsluid_h=' + html.cookies['__jsluid_h']
  request_header['Cookie'] = request_cookies
  print(request_header)
  html = requests.get(url, headers=request_header, timeout=5)
  print('new connection')
  print(html)
  print(html.text)

在经历重重的分析试验后,我们终于得出以上的代码成功实现了构造cookies。相信经过本篇的学习,小伙伴们又多了一种解决爬虫阻拦获取数据的cookies办法了,赶快行动起来吧。

到此这篇关于cookies应对python反爬虫知识点详解的文章就介绍到这了,更多相关如何构造cookies应对python反爬虫内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python3.3教程之模拟百度登陆代码分享
Jan 16 Python
Python之日期与时间处理模块(date和datetime)
Feb 16 Python
对python实现合并两个排序链表的方法详解
Jan 23 Python
详解pandas删除缺失数据(pd.dropna()方法)
Jun 25 Python
python实现最大子序和(分治+动态规划)
Jul 05 Python
pytorch 预训练层的使用方法
Aug 20 Python
浅谈Python中range与Numpy中arange的比较
Mar 11 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
图解Python中深浅copy(通俗易懂)
Sep 03 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 Python
使用Python+Appuim 清理微信的方法
Jan 26 Python
Python办公自动化PPT批量转换操作
Sep 15 Python
Python基于unittest实现测试用例执行
Nov 25 #Python
python反爬虫方法的优缺点分析
Nov 25 #Python
Pytest测试框架基本使用方法详解
Nov 25 #Python
python实现企业微信定时发送文本消息的实例代码
Nov 25 #Python
Python json解析库jsonpath原理及使用示例
Nov 25 #Python
搭建pypi私有仓库实现过程详解
Nov 25 #Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 #Python
You might like
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
window.showModalDialog使用手册
2007/01/11 Javascript
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
javascript温习的一些笔记 基础常用知识小结
2011/06/22 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
JavaScript中最简洁的编码html字符串的方法
2014/10/11 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
JavaScript iframe数据共享接口实现方法
2016/01/06 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
Javascript缓存API
2016/06/14 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
JS实现图片居中悬浮效果
2017/12/25 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
vue组件化中slot的基本使用方法
2019/05/01 Javascript
python用装饰器自动注册Tornado路由详解
2017/02/14 Python
python编写微信远程控制电脑的程序
2018/01/05 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
Python使用try except处理程序异常的三种常用方法分析
2018/09/05 Python
python创建与遍历List二维列表的方法
2019/08/16 Python
python 画函数曲线示例
2019/12/04 Python
python实现删除列表中某个元素的3种方法
2020/01/15 Python
pytorch masked_fill报错的解决
2020/02/18 Python
python GUI计算器的实现
2020/10/09 Python
详解matplotlib绘图样式(style)初探
2021/02/03 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
水毁工程实施方案
2014/04/01 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
高中运动会前导词
2015/07/20 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技