Python爬虫登录后cookie处理

今天继续给大家介绍Python爬虫相关知识,本文主要内容是Python爬虫登录后cookie处理。

一、cookie在登录操作中的作用

现如今,很多站点都需要我们登录,登陆后才可以访问一些页面。那么服务器是如何得知我们在访问页面的时候是否成功登录了呢?这就是cookie在网页访问中的作用。关于cookie,如果读者还存在疑惑,可以查阅文章:cookie详解
如果您看了上篇文章,或者对Web架构有基本的了解,那么就知道,我们在登录后,服务器会发送给我们一个cookie,这个cookie是由服务器生成的,一些随机的字符串组成。服务器在给我们发送cookie后,我们在使用浏览器访问时,就会在requests请求包里面携带服务器下发的cookie值,这样服务器就明确,我们已经登录过了还是没有登录过。
在这里,我们以本地搭建的DVWA网页为例,使用浏览器的开发者工具,可以看到在请求数据包中携带的cookie,如下所示:
在这里插入图片描述

二、引入session对象解决登录后访问问题

这样,我们在使用Python爬虫爬取这些网站时,就会遇到一个不可避免的问题,如何在访问时携带cookie值?
一种方法是,我们先让浏览器登录,然后查看浏览器发送的cookie值,然后我们在使用Python编程的时候,把该cookie值写入到requests.get()方法的headers变量中(因为cookie在客户端和浏览器之间的交互是通过HTTP头实现的)。这样做确实非常简便,但是问题在于,有的浏览器会不断更新cookie值,甚至每次用户访问都会更新cookie值,或者一个cookie值只会保留一定的期限,这样我们的程序在运行时就会因为cookie的时效性问题而失效。
另一种方法是在登录时的响应数据包中提取cookie,然后将该cookie信息放入到之后的请求数据包HTTP头中,并且根据访问时的响应数据包实时更新cookie。这些操作比较繁琐,但是requests库却提供了一种简单的方法,即引入session。
session即会话,如果我们使用了requests库的session机制,就可以实现cookie的自动处理。只要我们能够成功登录,那么session就会自动接收HTTP响应数据包中的cookie值,并在下次访问时携带该cookie值。session对象使用相关函数如下所示:

session=requests.session()
response=session.post(url,headers,data)

可以看出,与之前我们介绍的requests库的使用方式类似,我们对session机制的使用也非常简单。只需要先初始化一个session对象,与requests一样,该对象有自带的post、get等一系列方法,只需要使用该对象下的方法访问,即可实现session机制。

三、Python爬虫登录实战

接下来,我们就尝试使用Python爬虫,登录wordpress。
根据上述说明,我们编程代码如下所示:

import requests

url1="http://127.0.0.1/wordpress/wp-login.php"
url2="http://127.0.0.1/wordpress/wp-admin/"
headers={
    
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"}
data={
    
    
    "log": "root",
    "pwd": "root",
    "wp-submit": "登录",
    "redirect_to": "http://127.0.0.1/wordpress/wp-admin/",
    "testcookie": "1"
}
session=requests.session()
response1=session.post(url=url1,headers=headers,data=data)
response2=session.get(url=url2,headers=headers)
page_text=response2.text
fp=open("./test2.html",'w')
fp.write(page_text)
fp.close()

上述data变量中的数据,是参照登录数据包POST上传数据。代码运行后,发现生成了test2.html文件,使用浏览器访问后结果如下所示:
在这里插入图片描述
从上图可以看出,我们使用Python爬虫成功登录了wordpress,并爬取了登录后的数据。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200

猜你喜欢

转载自blog.csdn.net/weixin_40228200/article/details/128555968
今日推荐