CookieJar和HTTPCookieProcessor
来源:互联网 发布:java布尔类型的常量 编辑:程序博客网 时间:2024/06/13 00:11
CookieJar和HTTPCookieProcessor
我们在使用爬虫的时候,经常会用到cookie进行模拟登陆和访问。在使用urllib库做爬虫,我们需要借助http.cookiejar
库中的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浏览器 cookies.txt兼容的FileCookieJar实例。
LWPCookieJar (filename,delayload=None,policy=None):从FileCookieJar派生而来,创建与libwww-perl标准的 Set-Cookie3 文件格式兼容的FileCookieJar实例。
其实大多数情况下,我们只用CookieJar()
,如果需要和本地文件交互,就用 MozillaCookjar()
或 LWPCookieJar()
。
当然,如果我们对cookie有定制的需要,那么我们也要借助HTTPCookieProcess
处理器来处理。具体看下面代码。
使用CookieJar获取cookie值
代码如下:
if __name__ == '__main__': url = 'http://www.baidu.com/' headers = { 'User-Agent': 'Mozilla/5.0(Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3427.400 QQBrowser/9.6.12513.400' } cookie = cookiejar.CookieJar() handler = urllib.request.HTTPCookieProcessor(cookie) opener = urllib.request.build_opener(handler) resp = opener.open(url) cookieStr = '' for item in cookie: cookieStr = cookieStr + item.name + '=' + item.value + ';' print(cookieStr)
输出结果:
BAIDUID=C69C91EF147DBFE7206E152C8652E773:FG=1;BIDUPSID=C69C91EF147DBFE7206E152C8652E773;H_PS_PSSID=1460_21118_18560_24879_20927;PSTM=1510410052;BDSVRTM=0;BD_HOME=0;
获取网站的cookie并保存cookie到文件中
保存cookie到文件,我们需要使用MozillaCookjar()
import urllib.requestfrom http import cookiejardef save_cookie(url, cookie_filename): cookie = cookiejar.MozillaCookieJar(cookie_filename) handler = urllib.request.HTTPCookieProcessor(cookie) opener = urllib.request.build_opener(handler) resp = opener.open(url) cookieStr = '' for item in cookie: cookieStr = cookieStr + item.name + '=' + item.value + ';' print(cookieStr) cookie.save()if __name__ == '__main__': url = 'http://www.baidu.com/' headers = { 'User-Agent': 'Mozilla/5.0(Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3427.400 QQBrowser/9.6.12513.400' } cookie_filename = 'cookie.txt' req = urllib.request.Request(url, headers=headers) save_cookie(req, cookie_filename)
获取文件中的cookie访问链接
import urllib.requestfrom http import cookiejardef load_cookie(url, cookie_filename): cookie = cookiejar.MozillaCookieJar() cookie.load(cookie_filename) handler = urllib.request.HTTPCookieProcessor(cookie) opener = urllib.request.build_opener(handler) resp = opener.open(req) cookieStr = '' for item in cookie: cookieStr = cookieStr + item.name + '=' + item.value + ';' print(cookieStr)if __name__ == '__main__': url = 'http://www.baidu.com/' headers = { 'User-Agent': 'Mozilla/5.0(Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3427.400 QQBrowser/9.6.12513.400' } cookie_filename = 'cookie.txt' req = urllib.request.Request(url, headers=headers) load_cookie(req, cookie_filename)
使用cookiejar和post用户名和密码模拟人人网用户登入
import urllib.requestimport urllib.parsefrom http import cookiejarif __name__ == '__main__': # 人人网的很早的登入网站(最新的登入网站做了校验机制,现在不好登入...) url = 'http://www.renren.com/PLogin.do' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'} # post的data数据,email是用户名,password是密码,这个是登入网站的input标签的name属性值 data = {'email': 'xxxxxxxxx', 'password': 'xxxxxxx'} # 转成url编码 data = urllib.parse.urlencode(data).encode('utf-8') # 保存cookie的文件名称 cookie_filename = 'renren_cookie.txt' # 获取cookie对象 cookie = cookiejar.MozillaCookieJar(cookie_filename) # 构建一个cookie的处理器 handler = urllib.request.HTTPCookieProcessor(cookie) # 获取一个opener对象 opener = urllib.request.build_opener(handler) # 获取一个请求对象 req = urllib.request.Request(url, data) # 给opener添加请求头,使用的是元组的方式 opener.addheaders = [('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36')] # 请求服务器,返回响应对象,这时cookie已经随着resp对象携带过来了 resp = opener.open(req) # 保存cookie到文件 cookie.save() # 将响应的内容写入到文件 with open('renren_login.html', 'wb')as f: f.write(resp.read())
目前人人网对这种方式已经有校验,打开保存的文件renren_login.html,一开始处于登入状态,但是过会跳到登入页面去。应该是有校验机制。
- CookieJar和HTTPCookieProcessor
- Python3 cookiejar模块详解
- Cookiejar处理cookie
- CURL不依赖COOKIEJAR获取COOKIE
- CURL不依赖COOKIEJAR获取COOKIE
- [python3]整理http.cookiejar模块
- CURL不依赖COOKIEJAR获取COOKIE
- 每天laravel-20160821|CookieJar-1
- 每天laravel-20160822|CookieJar-2
- Python3 使用cookiejar管理cookie
- [Concurrent Programming in Java]CookieJar Problem
- Python利用CookieJar自动处理Cookies
- php使用CURL不依赖COOKIEJAR获取COOKIE的方法
- 使用http.cookiejar生产Cookie模拟用户登陆
- Cookie与Session机制,以及scrapy中cookiejar的理解
- 爬虫笔记(10/1)--------http.cookiejar模块
- python 标准库 —— http(http.cookiejar)
- python实现清华大学联网助手(二)——正则表达式re/网页跳转/cookiejar
- javaweb学习总结(六)log4j xml和properties两种配置
- 委托(delegate)小坑
- 使用css美化单选框(radio)和复选框(checkbox)的样式
- Android状态栏的显示与隐藏
- Mycat1.6 release版本报错: can't find (root) parent sharding node for sql
- CookieJar和HTTPCookieProcessor
- 数据库截取字符串的问题
- Android Jni 创建多线程调用Java方法
- 关于java 注解中元注解Inherited的使用详解
- java设计模式--单例模式
- Java类与对象
- 模拟实现strcpy函数
- java基础一
- 2017.11.16心得