urllib模块中处理cookie信息
在python中使用urllib库处理cookie,一般通过http.cookiejar模块和urllib模块的HTTPCookieProcessor处理器类一起使用
http.cookiejar模块主要作用是提供用于存储cookie到对象
HTTPCookieProcessor处理器的主要作用是处理这些cookie对象,并构建handler对象
http.cookiejar模块主要的类有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar
CookieJar类管理HTTP cookie值、存储HTTP请求生成到cookie、向传出的HTTP请求添加cookie对象,整个cookie都存储在内存中,对CookieJar实例进行垃圾回收后cookie页将丢失
FileCookieJar(filename,delayload=None,policy=None):从CookieJar派生而来,用来创建FileCookieJar实例,检索cookie信息并将cookie存储到文件中。filename是存储cookie到文件名。delayload为True时支持延迟访问访问文件,即只有在需要时才读取文件或在文件中存储数据。
MozillaCookieJar(filename,delayload=None,policy=None)从FileCookieJar派生而来,创建与Mozilla浏览器cookie.txt兼容的FileCookieJar实例。
LWPCookieJar(filename,delayload=None,policy=None)从FileCookieJar派生而来,创建与libwww-per标准的et-Cookie3文件格式兼容的FileCookieJar实例。
#使用CookieJar将cookie保存到内存中 from urllib import request from urllib import parse from http.cookiejar import CookieJar from http.cookiejar import MozillaCookieJar #1、创建一个cookiejar对象 cookiejar=CookieJar() #2、使用cookiejar对象创建一个HTTPCookieProcessor对象 handler=request.HTTPCookieProcessor(cookiejar) #3、使用上一步创建到handler对象创建一个opener opener=request.build_opener(handler) #4、使用opener发送登录的请求 data={'user':'myusername','pwd':'mypasswords'} login_url='https://www.domain.com/login' req=request.Request(login_url,data=parse.urlencode(data).encode('utf-8')) opener.open(req) #至此opener已经获取到了登陆所需的cookie #使用之前创建的opener访问目标页面,opener包含了登录所需要到cookie req=request.Request(url) data=opener.open(req)
使用MozillaCookieJar保存和读取cookie
一、保存cookie信息#1、创建一个cookiejar对象 cookiejar=MozillaCookieJar('d:/cookie.txt') #或者不指定cookie文件cookiejar=MozillaCookieJar() handler=request.HTTPCookieProcessor(cookiejar) opener=request.build_opener(handler) opener.open('https://www.domain.com/') cookiejar.save(filename,ignore_discard=False) #保存cookie信息到本地 #如果创建cookiejar对象时指定了cookie文件这里就不需要再次指定 #否则这里就要指定保存的cookie文件 #ignore_discard参数表示是否保存已经过期的cookie信息二、读取cookie信息
#1、创建一个cookiejar对象 cookiejar=MozillaCookieJar('d:/cookie.txt') #或者不指定cookie文件cookiejar=MozillaCookieJar() #2、读取cookie文件的信息 cookiejar.load(filename,ignore_discard=False) #读取cookie文件信息 #如果创建cookiejar对象指定了cookie文件这里就不需要再次指定 #否则就要指定读取的cookie文件 #ignore_discard参数表示是否读取已经过期的cookie信息 handler=request.HTTPCookieProcessor(cookiejar) opener=request.build_opener(handler) opener.open('https://www..domain.com/')