Python爬虫登录后cookie处理

本文介绍了Python爬虫在处理登录网站时如何利用cookie。通过理解cookie在登录中的作用,以及使用session对象来自动管理cookie,文章展示了如何登录WordPress并抓取登录后的内容。使用session可以简化处理登录状态和cookie更新的复杂性。
摘要由CSDN通过智能技术生成

今天继续给大家介绍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

Python 爬虫中使用 cookie 登录,一般需要以下步骤: 1. 发送登录请求,获取登录成功后的 cookie。 2. 将 cookie 保存下来,后续请求时带上 cookie。 下面是一个示例代码,假设登录成功后返回的 cookie 存储在变量 `cookie_str` 中: ```python import requests # 登录请求的 URL 和参数 login_url = 'http://example.com/login' login_data = {'username': 'your_username', 'password': 'your_password'} # 发送登录请求 session = requests.Session() response = session.post(login_url, data=login_data) # 获取 cookie,转换为字典格式 cookies = requests.utils.dict_from_cookiejar(session.cookies) # 将 cookie 转换为字符串格式,用于保存到文件或数据库中 cookie_str = '; '.join([f'{key}={value}' for key, value in cookies.items()]) # 将 cookie 保存到文件中 with open('cookie.txt', 'w') as f: f.write(cookie_str) # 后续请求时带上 cookie headers = {'Cookie': cookie_str} response = requests.get('http://example.com/some_page', headers=headers) ``` 在后续的请求中,需要将 cookie 以字符串格式加入到请求头部,示例代码中使用了 `headers` 参数来设置请求头部。如果需要从文件中读取保存的 cookie,可以使用以下代码: ```python # 从文件中读取 cookie with open('cookie.txt', 'r') as f: cookie_str = f.read().strip() # 将 cookie 以字典格式加入到 session session = requests.Session() cookies = requests.utils.cookiejar_from_dict({cookie.split('=')[0]: cookie.split('=')[1] for cookie in cookie_str.split('; ')}) session.cookies.update(cookies) # 后续请求时带上 cookie headers = {'Cookie': cookie_str} response = session.get('http://example.com/some_page', headers=headers) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远是少年啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值