欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CookieJar下载并使用cookies

程序员文章站 2022-05-11 23:14:35
...

在前面写过一篇《requests下载并使用cookies》,除了用requests,用http.cookiejar同样能实现,不过步骤繁琐很多,用http.cookiejar首先需要创建一个cookiejar对象,然后再用cookiejar创建一个handler,再在handler中创建一个opener,最后在opener中传递帐号密码,获取cookies信息。

下面主要介绍两种使用方法,一种是直接获取cookies信息然后获取目标网页信息;一种是先将cookies信息下载,再加载cookies信息并获取目标网页信息。下面直接用人人网举例说明。

一、直接获取cookies信息然后获取目标网页信息

简单来说分来两步完成,先登录并获取cookies信息,再用带cookies信息的opener获取目标页面信息

from urllib import request,parse
from http.cookiejar import CookieJar

#1、登录
#1.1、创建一个cookiejar对象
cookiejar = CookieJar()
#1.2、使用cookiejar创建一个HTTPCookieProcessor对象
handler = request.HTTPCookieProcessor(cookiejar)
#1.3、使用上一步创建的Handler创建一个opener
opener = request.build_opener(handler)
#1.4、使用opener发送登录请求(邮箱密码)
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' 
}
data = {
    'email':"你的帐号",
    'password':'你的密码'
}
login_url = 'http://www.renren.com/PLogin.do'#登录的网址
req = request.Request(login_url,headers = headers,data=parse.urlencode(data).encode('utf-8'))
opener.open(req)

#2、访问个人主页
dapeng_url = 'http://www.renren.com/880151247/profile'#爬取的网址
#获取个人主页页面的时候,不要新建一个opener
#应该要用上一步的那个opener,因为之前那个opener包含了登录所需要的cookie信息
req = request.Request(dapeng_url,headers=headers)
resp = opener.open(req)
with open('renren.html','w',encoding='utf-8') as fp:
    fp.write(resp.read().decode('utf-8'))

二、下载cookies并保存,再加载并使用cookies

这里用的是MozillaCookieJar来存放下载的cookies信息,需要注意一点的是,在save时最好设定ignore_discard=True,因为浏览器在关闭网页时会自动将对应的cookies更新状态为已过期,而默认的cookies下载时,只会下载当前有效的cookies,ignore_discard=True的作用是把已过期的cookie也保存下载。

下面是下载保存cookies信息的代码

#保存cookie到本地
from urllib import request,parse
from http.cookiejar import MozillaCookieJar

cookiejar = MozillaCookieJar('cookie.txt')
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' 
}
data = {
    'email':"你的帐号",
    'password':'你的密码'
}
login_url = 'http://www.renren.com/PLogin.do'
req = request.Request(login_url,headers = headers,data=parse.urlencode(data).encode('utf-8'))
resp = opener.open(req)
cookiejar.save(ignore_discard=True,ignore_expires=True)
#ignore_discard=True的作用是把已过期的cookie也保存下载

下面是加载cookies信息的代码

#加载本地的cookie
from urllib import request,parse
from http.cookiejar import MozillaCookieJar

cookiejar = MozillaCookieJar('cookie.txt')#本地cookie文件的地址
cookiejar.load(ignore_discard=True)#这个是加载
handler = request.HTTPCookieProcessor(cookiejar)
opener = request.build_opener(handler)

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36' 
}

dapeng_url = 'http://www.renren.com/880151247/profile'
req = request.Request(dapeng_url,headers=headers)
resp = opener.open(req)
with open('renren.html','w',encoding='utf-8') as fp:
    fp.write(resp.read().decode('utf-8'))

相关标签: cookies CookieJar