python爬虫使用cookie跳过登陆验证(一)

此文使用cookie + requests 编写简单的脚本用来跳过验证码等的处理,爬取需要登陆页面?

首先是必备原理

cookie: 在网站中,http请求是无状态的,也就是说,即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题:当浏览器访问网站后,这些网站将一组数据存放在客户端,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动携带给服务器,服务器通过浏览器携带的数据就能识别当前用户。

说人话:一般为网页存在本地的一些数据,用来下次访问时回传验证,常用于登陆验证,记住状态

session: Session是存放在服务器端的类似于HashTable结构(每一种Web开发技术的实现可能不一样,下文直接称之为HashTable)来存放用户 数据,当浏览器第一次发送请求时,服务器自动生成了一个HashTable和一个Session ID用来唯一标识这个HashTable,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable。

说人话:类似于客户机本地的cookie,session为服务器的’cookie’,可以实现一样的功能,往往还可以一同交互验证登陆,记住状态

是如何实现“记住我的登录状态”的功能

所以我们可以知道,如果将Session ID通过Cookie发送到客户端的时候设置其有效时间为1年,那么在今后的一年时间内,客户端访问我的网站的时候都回将这个Session ID值发送到服务器上,服务器根据这个Session ID从内存或者数据库里面恢复存放Key-Value对的HashTable。

但是,服务器上的Session其实不会保存。过了一定的时间之后,服务器上的Session就会被销毁,以减轻服务器的访问压力。当服务器上的数据被销毁后,即使客户端上存放了cookie也没有办法“记住我的登录状态”了。

所以,本文方法只是短期验证cookie跳过登陆验证访问之用,本地的cookie失效时间主要和服务器上session设置的时间有关

正文

1、以csdn为例,登陆后打开chrome的调试,然后network—>cookie先把这儿找到的cookie复制下来。

python爬虫是怎么绕开Vip的 python绕过登录爬虫_服务器

2、把cookie粘贴到下面简单的requests脚本中cookie变量内。

import requestsfrom bs4 import BeautifulSoupcookie = '''*此处粘贴从chrome中复制的cookie信息*'''header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36','Connection': 'keep-alive','accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3','Cookie': cookie,'referer': ''}url = '' # csdn 个人中心中,加载名字的js地址seesion = requests.session()response = seesion.get(url,headers=header)#response.coding="gbk"wbdata = response.textprint("正在打开请求")print(response.url)print()soup = BeautifulSoup(wbdata,'lxml')print(soup)

3、输出看看效果

3.1 使用requests打开 csdn 中个人资料页面,因为里面很多内容是js动态加载出来的,在分析找到名字的js地址为:
后,使用requests带上cookie访问此地址,如果成功,那应该可以看到登陆后的用户名,如下:

python爬虫是怎么绕开Vip的 python绕过登录爬虫_爬虫_02

3.2 chrome分析的进行对比

下图为对比,发现cookie成功跳过登陆,验证用户名成功。

python爬虫是怎么绕开Vip的 python绕过登录爬虫_python_03

3.3 不带cookie 的requests访问对比

python爬虫是怎么绕开Vip的 python绕过登录爬虫_登陆验证_04

总结

这种方法可以用来短期内快速对需要登陆的网页进行爬取,不过从开头的原理我们可以知道,cookie本地信息我们复制后可以一直存在,但是服务器上的session则一般会定时删除,所以开头才说这个和服务器上失效时间有关,如果失效了,则需要重新登陆,或者再进行python模拟登陆,保存新cookie,思路可以这样?。

一般会定时删除,所以开头才说这个和服务器上失效时间有关,如果失效了,则需要重新登陆,或者再进行python模拟登陆,保存新cookie,思路可以这样?。