虽然CookieJar模块能够做到给请求设置cookie,但是它的cookie是保存在内存里的,每次用都需要重新设置,
这就衍生了一个它的子类---FileCookieJar,它可以将cookie保存在文件中,然后直接使用就可了
from urllib import request,parse
from http import cookiejar
# 创建filecookiejar实例对象
# 它需要一个参数,既cookie保存的位置
filename = 'cookie.txt'
cookie = cookiejar.FileCookieJar(filename)
# 根据创建的cookie生成cookie的管理器
cookie_handle = request.HTTPCookieProcessor(cookie)
# 创建http请求管理器
http_handle = request.HTTPHandler()
# 创建https管理器
https_handle = request.HTTPSHandler()
# 创建求求管理器,将上面3个管理器作为参数属性
# 有了opener,就可以替代urlopen来获取请求了
opener = request.build_opener(cookie_handle,http_handle,https_handle)
def login():
'''
负责初次登录
需要传递用户名和密码,来获取登录的cookie凭证
'''
# 登录url,需要从登录form的action属性中获取
url = 'http://www.renren.com/PLogin.do'
# 登录所需要的数据,数据为字典形式,
# 此键值需要从form扁担中对应的input的name属性中获取
data = {
'email':'136808069@qq.com',
'password':'123456'
}
# 将数据解析成urlencode格式
data = parse.urlencode(data)
req = request.Request(url,data=data)
# 正常是用request.urlopen(),这里用opener.open()发起请求
response = opener.open(req)
# 保存cookie文件
cookie.save()
if __name__ == '__main__':
'''
执行login函数
'''
login()
from urllib import request,parse
from http import cookiejar
# 创建cookiejar实例对象
cookie = cookiejar.FileCookieJar()
# 读取已经保存的cookie文件
# 读取之后,就无需登录,直接访问主页即可
cookie.load('cookie.txt')
# 根据创建的cookie生成cookie的管理器
cookie_handle = request.HTTPCookieProcessor(cookie)
# 创建http请求管理器
http_handle = request.HTTPHandler()
# 创建https管理器
https_handle = request.HTTPSHandler()
# 创建求求管理器,将上面3个管理器作为参数属性
# 有了opener,就可以替代urlopen来获取请求了
opener = request.build_opener(cookie_handle,http_handle,https_handle)
def getHomePage():
'''
获取登录后的页面
'''
# 此url是登录后的链接地址
url = 'http://www.renren.com/965187997/profile'
# 如果已经执行了上面的login函数,
# 那么此时的opener已经是包含了cookie信息的一个opener对象
res = opener.open(url)
html = res.read().decode()
with open('renren.html','w') as f:
f.write(html)
if __name__ == '__main__':
getHomePage()