1、Opener
当你获取一个URL你使用一个opener
(一个urllib2.OpenerDirector的实例)。在前面,我们都是使用的默认的opener,也就是urlopen。它是一个特殊的opener,可以理解成opener的一个特殊实例,传入的参数仅仅是url
,data
,timeout
。
如果我们需要用到Cookie,只用这个opener是不能达到目的的,所以我们需要创建更一般的opener来实现对Cookie的设置。
2、Cookieslib
cookielib
模块的主要作用是提供可存储 cookies
的对象,以便于 urllib2
模块配合使用来访问 Internet 资源,我们可以利用本模块的 CookieJar
类的对象来捕获 cookie
并在后续连接请求时重新发送,可实现模拟登陆的功能。
该模块的主要对象有CookieJar
、FileCookieJar
、MozillaCookieJar
、LWPCookieJar
他们的关系:CookieJar
—-派生—->FileCookieJar
—-派生—–>MozillaCookieJar
和LWPCookieJar
下边会从获取cookies开始,一步步实现模拟登陆
1)、获取cookies
并保存到变量中
首先,我们先利用CookieJar对象实现获取cookie的功能,存储到变量中
import urllib2
import cookielib
# ----------------获取 cookies 保存到变量---------------
# 声明一个 CookiesJar 对象实例来保存 cookies
cookie = cookielib.CookieJar()
# 利用 urllib2库的HTTPCookieProcessor对象来创建 cookie 处理器
hander = urllib2.HTTPCookieProcessor(cookie)
# 通过 hander 来构建 opener
opener = urllib2.build_opener(hander)
# 添加 header
opener.addheaders = [("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36")]
# 此处 open 方法和 urllib2的 urlopen 方法一样,也可以传入 request
response1 = opener.open('http://www.baidu.com')
# response 变量保存网页信息,cookie 变量保存 cookies 信息
print cookie
for i in cookie:
print "Name = " + i.name
print "Value = " + i.value
2)、获取cookies
保存到文件中
import urllib2
import cookielib
# ----------------获取 cookies 保存到文件--------------
#设置保存cookie的文件,同级目录下的cookie.txt
filename = 'cookie.txt'
# 声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件
cookie = cookielib.MozillaCookieJar(filename)
# 利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
hander = urllib2.HTTPCookieProcessor(cookie)
# 通过handler来构建opener
opener = urllib2.build_opener(hander)
# 添加 header
opener.addheaders = [("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36")]
# 创建一个请求,原理同urllib2的urlopen
response2 = opener.open("http://www.baidu.com")
# 保存cookie到文件
cookie.save(ignore_discard=True,ignore_expires=True)
3)、从文件中获取cookies
并访问网站
import urllib2
import cookielib
# -----------------从文件中获取并访问-------------------
# 创建 MozillaCookieJar 实例对象
cookie = cookielib.MozillaCookieJar()
# 从文件中读取 cookies 内容到变量
cookie.load('cookie.txt',ignore_discard=True,ignore_expires=True)
# 创建请求的 request
req = urllib2.Request("http://www.baidu.com")
# 利用urllib2库的HTTPCookieProcessor对象来创建cookie处理器
hander = urllib2.HTTPCookieProcessor(cookie)
# 通过handler来构建opener
opener = urllib2.build_opener(hander)
# 添加 header
opener.addheaders = [("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36")]
response3 = opener.open(req)
print response3.read()
网友评论