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'))