1、COOKIE简介
![](https://img.php1.cn/3cd4a/1eebe/cd5/dc7ef30f57b727c7.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjYyMzAwMw==,size_16,color_FFFFFF,t_70)
2、爬虫自动登录访问授权页面
![](https://img.php1.cn/3cd4a/1eebe/cd5/02c379d60086f382.webp?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjYyMzAwMw==,size_16,color_FFFFFF,t_70)
人人网举例:需要登录才能才能查看(经验:不管对方网址是否反扒,都加上请求头,才是最安全的)
![](https://img.php1.cn/3cd4a/189d8/b64/5b34b53b79a39fdd.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NjYyMzAwMw==,size_16,color_FFFFFF,t_70)
# -*- coding: utf-8 -*-# 爬虫自动登录访问授权页面(自动获取COOKIE)# 大鹏董成鹏主页: http://www.renren.com/880151247/profile
# 人人网登录url: http://www.renren.com/PLogin.dofrom urllib import request
from urllib import parse
from http.COOKIEjar import COOKIEJarheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}def get_opener():# 1 登录# 1.1 创建一个COOKIEjar对象COOKIEjar = COOKIEJar()# 1.2 使用COOKIEjar创建一个HTTPCOOKIEProcess对象handler = request.HTTPCOOKIEProcessor(COOKIEjar)# 1.3 使用上一步创建的handler创建一个openeropener = request.build_opener(handler)return openerdef login_renren(opener):# 1.4 使用opener发送登录的请求(人人网的邮箱和密码)data = {'email': '970138074@qq.com','password': 'pythonspider'}login_url = "http://www.renren.com/PLogin.do"req = request.Request(login_url, data=parse.urlencode(data).encode('utf-8'), header=headers)opener.open(req)def visit_profile(opener):# 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:# write函数必须写入一个str的数据类型# resp.read()读出来的是一个bytes数据类型# byte -> decode -> str# str -> encode -> bytesfp.write(resp.read().decode('utf-8'))if __name__ == '__main__':opener = get_opener()login_renren(opener)visit_profile(opener)
3、COOKIE信息的保存与加载
1)保存COOKIE到本地
保存COOKIE到本地,可以使用COOKIEjar的save方法,并且需要指定一个文件名
# 1.保存COOKIE
# -*- coding: utf-8 -*-from urllib import request
from http.COOKIEjar import MozillaCOOKIEJarCOOKIEjar = MozillaCOOKIEJar('COOKIE.txt') # 指定存储的位置及文件名字
handler = request.HTTPCOOKIEProcessor(COOKIEjar)
opener = request.build_opener(handler)resp = opener.open('http://www.baidu.com/')COOKIEjar.save() # 上面指定了文件名字,此处则不用再次指定名字(否则需要指定文件名)
2)从本地加载COOKIE
从本地加载COOKIE,需要使用COOKIEjar的load方法,并且也需要指定方法
# 2.写入COOKIE
from urllib import request
from http.COOKIEjar import MozillaCOOKIEJarCOOKIEjar = MozillaCOOKIEJar('COOKIE.txt') # 指定存储的位置及文件名字
COOKIEjar.load(ignore_discard=True)
handler = request.HTTPCOOKIEProcessor(COOKIEjar)
opener = request.build_opener(handler)resp = opener.open('http://httpbin.org/COOKIEs')
for COOKIE in COOKIEjar:print(COOKIE)# COOKIEjar.save(ignore_discard=True)