cookies应对python反爬虫知识点详解
作者:小妮浅浅 发布时间:2023-12-16 06:15:18
在保持合理的数据采集上,使用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 :
先尝试了将那段js脚本保存下来,包装成一个html文件打开,发现浏览器不停的刷新,也并没起什么作用。那就分析一下js脚本,原来的代码是单行的,自己整理一下并加了一些变量名和log,大概是这么个样子:
将第16行的变量cmd打印出来看看,发现是另一段类似的脚本:
可以看到第二段脚本已经开始设置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办法了,赶快行动起来吧。
来源:https://www.py.cn/jishu/jichu/21238.html


猜你喜欢
- 初识word文档-节-的概念编辑一篇word文档,往往首先从页面设置开始,从下图可以看出,页面设置常操作的有页边距、纸张方向、纸张大小4个,
- 本文实例展示了Python生成日历的实现方法。该实例可实现一个月的日历生成5x7的列表,列表里的没个日期为datetime类型,采用pyth
- JSON简介JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript的一个子集
- 在这家公司一个项目, 需要添加英文版本,就是中英文化了,直接上代码1.首先是main.js页面做配置import VueI18n from
- 栗子:计算斐波那契数列(任一个数都是前两个数之和的数字序列)Python2.7实现代码如下:<strong><span s
- 动态规划(Dynamic Programming,DP)是一种常用的算法思想,通常用于解决具有重叠子问题和最优子结构性质的问题。动态规划算法
- 1.切片# 切片:取list或tuple的部分元素nameList = ["Willard","ChenJD&
- 一、内容回顾Model- 数据库操作- 验证class A(MOdel):user = email = pwd =Form- class L
- 实现效果实现代码import matplotlib.pyplot as pltfrom skimage import iofile_name
- 在之前的一篇文章我们已经介绍过替换python字典中的key值方法 ,本篇文章将作为那篇文章的补充。使用 dict.update() 方法替
- Python3安装第三方爬虫库BeautifulSoup4,供大家参考,具体内容如下在做Python3爬虫练习时,从网上找到了一段代码如下:
- __add__(), 同一个类,两个对象相加的实现逻辑,重写 +class Myclass(object): &n
- 本文实例讲述了Python实现对文件进行单词划分并去重排序操作。分享给大家供大家参考,具体如下:文件名:test1.txt文件内容:But
- 书接上文用Python搓一个太阳系你们要的3D太阳系3体人真的存在吗太长不看版最小势能点在由两个大质量物体构成的重力系统中,有一些特殊的区域
- 1、纯粹的截取字符串function cutstr(thestr1,strlen) dim l,t,c&nbs
- 这篇文章主要介绍了python多进程间通信代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可
- 程序开始:<% Server.ScriptTimeout = &HE10 '&
- 一、函数的变量作用域和可见性1.全局变量在main函数执行之前初始化,全局可见2.局部变量在函数内部或者if、for等语句块有效,使用之后外
- JQuery,mootools,Ext等类库在这部分实现得非常艰辛,盘根错节地动用一大堆方法,因此想把这部分抠出来难度很大。深入研究它们的实
- $array=explode(separator,$string); $string=implode(glue,$array);使用和理解这