什么是 cookie :

指某些网站为了辨别用户身份,进行 session 跟踪而储存在用户本地终端上的数据,通常以 txt 文件形式存储。比如你登录了淘宝,浏览器就会
保存 cookie 信息,这样我们浏览淘宝的其他商家页面就不需要再重新登录了;如果没有保存 cookie 信息,你每切换到另一个页面都要登录一次。

cookielib 一般用于客户端处理 HTTP cookie 信息,通过它可以从服务器端获取 cookie 信息,反过来又可以通过它将获取到的 cookie 发送给服务器

如何获取 cookie :

#!/usr/bin/env python
#-*- coding:utf-8 -*- import urllib2
import cookielib url = 'http://www.baidu.com/'
cookies = cookielib.CookieJar() # CookieJar()方法用于收集cookie信息,只有当我们访问一个URL的时候才会有cookie信息,目前只是创建一个cookie对象,里面是没有值的
handler = urllib2.HTTPCookieProcessor(cookies) # 使用 urllib2 的 HTTPCookieProcessor() 方法,创建一个 cookie 处理器,对收集到的 cookie 进行处理
opener = urllib2.build_opener(handler) # 使用 urllib2 的 build_opener() 方法,创建一个 opener 实例,该实例用于处理给定的URL链接
response = opener.open(url) # opener.open(url) 相当于 urllib2.urlopen(url),打开链接之后,上面定义的 cookies 就有值了 for cookie in cookies:
print "%s: %s" % (cookie.name, cookie.value)
[root@localhost ~]$ python 1.py
BAIDUID: 006F1423AFEFD18A005B7C77DF41CF12:FG=1
BIDUPSID: 006F1423AFEFD18A005B7C77DF41CF12
H_PS_PSSID: 1431_21104_18560_26350_22157
PSTM: 1550233508
delPer: 0
BDSVRTM: 0
BD_HOME: 0

爬虫中的用法:

#!/usr/bin/env python
#-*- coding:utf-8 -*- import re
import sys
import urllib
import urllib2
import cookielib class AdminSite(object): def __init__(self):
self.login_url = 'http://www.xxxx.com:8899/accounts/login/' # 登录页面的URL
self.request_url = 'http://www.xxxx.com:8899/yunwei/index/' # 要爬取的页面的URL
self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36'} def getPage(self):
cookie = cookielib.CookieJar()
handler = urllib2.HTTPCookieProcessor(cookie)
self.opener = urllib2.build_opener(handler) try:
request = urllib2.Request(url=self.request_url, headers=self.headers)
response = self.opener.open(request)
return response.read()
except urllib2.URLError, e:
if hasattr(e, 'code'):
print '连接服务器失败,错误代码:%s' % e.code
if hasattr(e, 'reason'):
print '连接服务器失败,失败原因:%s' % e.reason
else:
print '连接服务器失败,失败原因:%s' % e
sys.exit(1) def getToken(self):
page = self.getPage()
regular = re.compile(r"<form.*?<input.*?value='(.*?)'.*?>", re.S)
token = regular.search(page)
if token:
return token.group(1)
else:
return None def login(self):
form_data = {'csrfmiddlewaretoken': self.getToken(),
'username': 'xxxxxx',
'password': 'xxxxxx',
'next': '/yunwei/index/'}
self.post_data = urllib.urlencode(form_data)
try:
request = urllib2.Request(url=self.login_url, data=self.post_data, headers=self.headers)
response = self.opener.open(request)
print response.read()
return response.read()
except urllib2.URLError, e:
if hasattr(e, 'code'):
print '连接服务器失败,错误代码:%s' % e.code
if hasattr(e, 'reason'):
print '连接服务器失败,失败原因:%s' % e.reason
else:
print '连接服务器失败,失败原因:%s' % e
sys.exit(1) if __name__ == '__main__':
obj = AdminSite()
obj.login()

Python cookielib 模块的更多相关文章

  1. python—cookielib模块对cookies的操作

    最近用python写爬虫爬了点数据,确实是很好用的东西,今天对python如何操作cookie进行一下总结. python内置有cookielib模块操作cookie,配合urllib模块就可以了很轻 ...

  2. cookielib模块基础学习

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' import cookielib #主要用于处理http客户端的co ...

  3. 【转】cookielib模块

    cookielib模块 cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源.例如可以利用本模块 的CookieJar类的对象来 ...

  4. urllib2模块、cookielib模块

    urllib2模块 urllib模块和urllib模块类似,用来打开URL并从中获取数据.与urllib模块不同的是,urllib模块不仅可以使用urlopen() 函数还可以自定义Opener来访问 ...

  5. Python标准模块--threading

    1 模块简介 threading模块在Python1.5.2中首次引入,是低级thread模块的一个增强版.threading模块让线程使用起来更加容易,允许程序同一时间运行多个操作. 不过请注意,P ...

  6. Python的模块引用和查找路径

    模块间相互独立相互引用是任何一种编程语言的基础能力.对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义.对于编译型的语言,比如C#中 ...

  7. Python Logging模块的简单使用

    前言 日志是非常重要的,最近有接触到这个,所以系统的看一下Python这个模块的用法.本文即为Logging模块的用法简介,主要参考文章为Python官方文档,链接见参考列表. 另外,Python的H ...

  8. Python标准模块--logging

    1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...

  9. python基础-模块

    一.模块介绍                                                                                              ...

随机推荐

  1. LeetCode: Reverse Words in a String 解题报告

    Reverse Words in a String Given an input string, reverse the string word by word. For example,Given ...

  2. RTX——第12章 系统时钟节拍和时间管理

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 RTX 操作系统的时钟节拍和时间管理函数,其中时间管理函数是 RTX 的基本函数,初学 ...

  3. Java 命令行运行java程序,出现“找不到或无法加载主类 ”的注意事项

    引用:http://blog.chinaunix.net/uid-27106528-id-5209914.html 要在CMD命令行中使用java 运行java程序,关于出现 “找不到或无法加载主类 ...

  4. linux中vim中文显示乱码

    这里所说的都是全局设定,打开vimrc文件后,只需要在文件最后添加以下代码就可以了: set fileencodings=utf-8,gb2312,gbk,gb18030 set termencodi ...

  5. Spring使用facotry-method创建单例Bean总结<转>

       阅读目录 1 最原始的实现单例模式的方法(存在线程不安全): 2 通过关键字Synchronized强制线程同步 3 通过静态内部类进行单例 通过spring的factory-method来创建 ...

  6. [转]Handler学习笔记(一)

    一.Handler的定义: Handler主要接收子线程发送的数据, 并用此数据配合主线程更新UI,用来跟UI主线程交互用.比如可以用handler发送一个message,然后在handler的线程中 ...

  7. Select显示多级分类列表

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 如何查看机器是否为vmware虚拟机

    vmware虚拟机的网卡MAC地址一般都是005056开头的,可用ifconfig看一下,也可用dmesg |grep vm查看 艺搜参考 http://bbs.chinaunix.net/threa ...

  9. HttpHelper万能框架GetMergeCookie的问题

    用万能框架写了一个DZ带验证码POST登录一直错误 http://www.sufeinet.com/thread-17795-1-1.html 调试半天发现是框架GetMergeCookie的问题,, ...

  10. unity3d中的DontDestroyOnLoad来回切换出现多个实例问题

    在用Unity3D开发游戏中,我们会经常创建多个场景,但是在场景过度的时候,通常场景中的对象会被删除.所以Unity3D给了我们一个不删除前一个 场景中的某一个对象或者脚本的API,那就是“DontD ...