Python3中Cookie的创建、保存与读取实战
本文详解Python3中Cookie的创建、保存与读取方法。通过CookieJar、LWPCookieJar等类,结合urllib.request实现HTTP请求中的Cookie管理。涵盖Cookie的生成、持久化到文件(如LWPCookieJar)以及从文件读取并复用Cookie进行后续请求的完整流程,适用于需要模拟登录或保持会话状态的爬虫开发场景。
Cookie在Python3中的作用与核心类
Cookie主要用于辨别用户身份和进行Session跟踪,通常存储在用户本地终端上。在抓取需要登录权限的页面内容时,必须使用Cookie来模拟登录状态。Python3标准库提供了`http.cookiejar`模块来管理HTTP生成的Cookie,其中`CookieJar`负责核心的存储工作,并能向HTTP请求添加指定的Cookie。
为了满足不同场景的需求,`CookieJar`衍生出了几个子类:
FileCookieJar:支持将Cookie保存为文件的基类。LWPCookieJar:`FileCookieJar`的子类,遵循libwww-perl标准的Cookie文件格式。MozillaCookieJar:`FileCookieJar`的子类,遵循Mozilla浏览器的Cookie文件格式。
这两个子类实现了将Cookie内容持久化保存到本地文件的功能,但它们的保存标准和格式有所不同,开发者需根据实际需求选择合适的类。
创建与管理Cookie对象
在发起HTTP请求前,首先需要创建一个管理Cookie的对象。通过`urllib.request`模块中的`HTTPCookieProcessor`将Cookie处理器与Opener绑定,从而在请求中自动处理Cookie。
from http.cookiejar import CookieJar, LWPCookieJar
from urllib.request import Request, urlopen, HTTPCookieProcessor, build_opener
import ssl
# 生成一个管理cookie的对象
cookie_obj = CookieJar()
# 创建一个支持cookie的对象,对象属于HTTPCookieProcessor
cookie_handler = HTTPCookieProcessor(cookie_obj)
# 创建一个opener
opener = build_opener(cookie_handler)
# 发起请求
response = opener.open('http://www.baidu.com')
print(response)
# 打印获取到的cookie
for cookie in cookie_obj:
print('key:', cookie.name)
print('value:', cookie.value)将Cookie保存到文件
若需将Cookie持久化保存以便后续复用,应使用`LWPCookieJar`或`MozillaCookieJar`。以下示例演示如何使用`LWPCookieJar`将Cookie保存到指定文件。
from http.cookiejar import CookieJar, LWPCookieJar
from urllib.request import Request, urlopen, HTTPCookieProcessor, build_opener
filename = 'neihan.txt'
# 设置cookie保存的文件
cookie_obj = LWPCookieJar(filename=filename)
# 创建一个支持cookie的对象,对象属于HTTPCookieProcessor
cookie_handler = HTTPCookieProcessor(cookie_obj)
# 创建一个opener
opener = build_opener(cookie_handler)
# 请求网页
response = opener.open('http://www.neihanshequ.com')
# 保存cookie到指定的文件当中去
# ignore_expires=True 即便目标cookie已经在文件中存在,仍然对其写入
# ignore_discard=True 即便cookie将要/已经过期,仍然写入
cookie_obj.save(ignore_expires=True, ignore_discard=True)从文件读取并复用Cookie
保存Cookie后,可以在后续请求中直接加载该文件,避免重复登录。以下代码演示如何从文件中读取Cookie并用于新的请求。
from http.cookiejar import CookieJar, LWPCookieJar
from urllib.request import Request, urlopen, HTTPCookieProcessor, build_opener
cookie = LWPCookieJar()
# 从文件中读取cookie到变量
cookie.load('neihan.txt')
request = Request('http://www.neihanshequ.com')
# 创建一个支持cookie的对象,对象属于HTTPCookieProcessor
cookie_handler = HTTPCookieProcessor(cookie)
# 创建一个opener
opener = build_opener(cookie_handler)
# 请求网页
response = opener.open(request)
# print(response.read().decode())模拟登录并保存Cookie的完整流程
在实际爬虫开发中,常需模拟登录以获取特定权限。以下示例展示了如何构造POST请求进行登录,处理SSL证书问题,并将登录后的Cookie保存到文件。
from http.cookiejar import CookieJar, LWPCookieJar
from urllib.request import Request, urlopen, HTTPCookieProcessor, build_opener
from urllib.parse import urlencode
import ssl
cookie = LWPCookieJar(filename='meishi.txt')
cookie_handler = HTTPCookieProcessor(cookie)
opener = build_opener(cookie_handler)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:61.0) Gecko/20100101 Firefox/61.0'
}
post_url = 'https://i.meishi.cc/login.php?redirect=https%3A%2F%2Fi.meishi.cc%2Flogin.php%3Fac%3Dzhuce'
# urlencode对url当中的参数进行编码
# urlencode()编码的对象为字典类型
post_data = urlencode({
'username': '***********', # 自己的登录账号
'password': '************' # 自己的登录密码
})
# 请求url 并传参,设置编码方式
request = Request(post_url, bytes(post_data, encoding='utf-8'), headers=headers)
# 解决证书问题
ssl._create_default_https_context = ssl._create_unverified_context
response = opener.open(request)
print(response.read().decode())
# 保存cookie到文件
cookie.save(ignore_discard=True, ignore_expires=True)以上就是Python3中Cookie的创建、保存与读取的详细内容,更多关于Python爬虫技术、CookieJar类用法及urllib模块实战的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









