cookiejar

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.request

from http import cookiejar

def 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.request

from http import cookiejar

def 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.request

import urllib.parse

from http import cookiejar

if __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包_「cookiejar」http.cookiejar库之CookieJar - seo实验室相关推荐

  1. 利用python画分形图_「分形」python简单的分形图片 - seo实验室

    分形 康托集 # 康托集 import pygame pygame.init() screen = pygame.display.set_caption('康托集') screen = pygame. ...

  2. android seekto实现_「seekto」android MediaPlayer 的SeekTo 方法 - seo实验室

    seekto Android使用 mediaplayer 播放video视频过程中, 当用户退出当前播放,再从后台恢复播放时,需要跳转到之前退出的时间点继续播放. 使用的方法基本都是 seekto 之 ...

  3. Supplier JAVA_「supplier」java1.8之supplier理解 - seo实验室

    supplier supplier也是是用来创建对象的,但是不同于传统的创建对象语法:new,看下面代码: public class TestSupplier { private int age; T ...

  4. java expected_「expected」JAVA常见错误之 expected - seo实验室

    expected 例1:public class line1{ int test1=666; line2 l2=new line2(); l2.ShowIt(test1); } 例2:public c ...

  5. cookiejar包_爬虫之cookiejar模块

    简介 有时候我们需要爬一些需要登录才能进入网页,这个时候就要用到cookie相关的一些模块来操作了 内置的http包里包含了cookie相关的一些模块,通过她们我们可以自动使用cookie Cooki ...

  6. tomcat 不支持put 高版本_「MG6_DCT280」湿式七档双离合版本-性价比并不高

    上汽名爵_MG6定义为「掀背式运动轿车」,设计感很有些英伦风格,性能也确实可圈可点.然而这台车只有MT版本值得选择,即使在新款升级"DCT280"湿式七档双离合变速箱后也不例外.因 ...

  7. js最小化浏览器_「译」解析、抽象语法树(ast) +如何最小化解析时间的5个技巧...

    前言 该系列课程会在本周陆续更新完毕,主要讲解的都是工作中可能会遇到的真实开发中比较重要的问题以及相应的解决方法.通过本系列的课程学习,希望能对你日常的工作带来些许变化.当然,欢迎大家关注我,我将持续 ...

  8. java 同步解决不安全类_「JAVA」Java 线程不安全分析,同步锁和Lock机制,哪个解决方案更好...

    线程不安全 线程不安全的问题分析:在小朋友抢气球的案例中模拟网络延迟来将问题暴露出来:示例代码如下: public class ImplementsDemo { public static void ...

  9. java tcp权限控制_「图解」TCP重传、滑动窗口、流量控制、拥塞控制

    前言 前一篇35 张图解被问千百遍的 TCP 三次握手和四次挥手面试题得到了很多读者的认可,在此特别感谢你们的认可,大家都暖暖的. 来了,今天又来图解 TCP 了,小林可能会迟到,但不会缺席. 迟到的 ...

最新文章

  1. 编译原理上机实习c语言小子集编译程序的实现报告,编译原理上机实习指导书(2015-11修改).pdf...
  2. [裴礼文数学分析中的典型问题与方法习题参考解答]5.1.5
  3. 算法----实现strStr 函数
  4. POJ 3522 Slim Span (Kruskal枚举最小边)
  5. python中的break+while break+for
  6. CSS中盒模型的理解
  7. deepin安装卡死在蓝色背景_求大神帮助~安装DEEPIN系统卡在蓝色背景图什么原因...
  8. 5分钟带你了解Kafka的技术架构 | 技术头条
  9. SpringCloud 为什么需要使用配置中心
  10. mybatis3.2.2的一些测试
  11. 卡巴斯基PURE3.0激活码授权文件KEY
  12. cad刷新快捷键_47个快捷键、50个CAD技巧。
  13. CAD图清晰打印设置
  14. m3u8播放器 android,在android中播放m3u8视频
  15. 数据库——数据字典是什么?
  16. cad卸载不干净_卸载软件不干净?这样做,完全没有残留
  17. 将QQ音乐下载的 tkm 格式的音乐文件如何免费转换成 MP3 格式
  18. Guided Adversarial Attack for Evaluating and Enhancing Adversarial Defenses
  19. Java实现 蓝桥杯VIP 算法提高 研究兔子的土豪
  20. Typora的崩溃导致文件丢失

热门文章

  1. 二、8大数据类型、变量
  2. 补题(最短路+拆点)HUD-6805
  3. 生于七十年代的尴尬完全版
  4. 2009老百姓最关心的十大问题
  5. EWMA 指数加权移动平均 模型
  6. C语言-结构体与共用体
  7. python自然语言处理实战_Python 自然语言处理 PDF 清晰完整版
  8. python财务应用是什么意思,python财务应用案例代码
  9. 【计算机基础】计算机组成-DRAM与SRAM
  10. 【youcans 的 OpenCV 例程200篇】172.SLIC 超像素区域分割算法比较