Urllib库的使用九---进阶四(Cookiejar的使用)

2018-10-18  本文已影响0人  IT的咸鱼
通过上篇的代码可以看到其实是实现了获取Cookie,通过Cookie来请求网页数据的 但是这样很明显不够灵活,也不够复杂,我们有没有方便一点的做法呢?

cookiejar库 和 HTTPCookieProcessor处理器

cookiejar模块:主要作用是提供用于存储cookie的对象
HTTPCookieProcessor处理器:主要作用是处理这些cookie对象,并构建handler对象。

cookiejar 库

其实大多数情况下,我们只用CookieJar(),如果需要和本地文件交互,就用 MozillaCookjar()

实例一

获取Cookie,并保存到CookieJar()对象中:
# urllib_cookiejar_test1.py
import urllib
from http import cookiejar
# 构建一个CookieJar对象实例来保存cookie
cookiejar = cookiejar.CookieJar()
# 使用HTTPCookieProcessor()来创建cookie处理器对象,参数为CookieJar()对象
handler=urllib.request.HTTPCookieProcessor(cookiejar)
# 通过 build_opener() 来构建opener
opener = urllib.request.build_opener(handler)
# 4. 以get方法访问页面,访问之后会自动保存cookie到cookiejar中
opener.open("http://www.baidu.com")
## 可以按标准格式将保存的Cookie打印出来
cookieStr = ""
for item in cookiejar:
    cookieStr = cookieStr + item.name + "=" + item.value + ";"

## 舍去最后一位的分号
print (cookieStr[:-1])
#我们使用以上方法将Cookie保存到cookiejar对象中

实例二

使用MozillaCookjar() 访问网站或者cookie,并且把获得的cookie保存在创建的cookie文件中
import urllib.request
import http.cookiejar
#设置文件名
filename = 'cookie.txt'
# 声明一个MozillaCookieJar对象,MozillaCookieJar (filename,delayload=None,policy=None)
cookiejar = http.cookiejar.MozillaCookieJar(filename)
# 使用HTTPCookieProcessor()创建cookie处理器对象
handler = urllib.request.HTTPCookieProcessor(cookiejar)
#通过build_opener()来构造opener
opener = urllib.request.build_opener(handler)
#使用opener.open创建一个请求
response = opener.open('http://www.baidu.com')
#保存cookie到本地文件,cookie.txt
cookiejar.save()

实例三

MozillaCookjar() 从文件中获取cookies,作为请求的一部分去访问
import urllib.request
import http.cookiejar as cookiejar
#实例化对象
cookiejar = cookiejar.MozillaCookieJar()
#要读取得cookie文件
cookiejar.load('cookie.txt')
for i in cookiejar:
    print(i.name,i.value)

cookiejar和post模拟登录人人网

模拟登录要注意几点:

# -*- coding:utf-8 -*-
import urllib.request
import http.cookiejar as cookiejar
from urllib import parse
#1.构造一个CookieJar对象实例来保存cookie
cookie = cookiejar.CookieJar()
# 2.使用HTTPCookieProcessor()创建cookie处理器对象,
# 参数为CookieJar()对象
cookie_handler = urllib.request.HTTPCookieProcessor(cookie)
#3.通过build_opener()来构建opener
opener = urllib.request.build_opener(cookie_handler)
#4.addheaders接受一个列表,里面每一个元素都是一个headers信息的元组
#opener将会附带header信息
opener.addheaders = [
    ('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:59.0) Gecko/20100101 Firefox/59.0'),
]
#5.需要登录账号和密码
data = {
    'email':'账号',
    'password':'密码',
}
#6. 通过urlencode()转码
postdata = parse.urlencode(data).encode('utf-8')
#7. 构建Request请求对象,包含需要发送的用户名和密码
request = urllib.request.Request("http://www.renren.com/PLogin.do", data = postdata)
# 8. 通过opener发送这个请求,并获取登录后的Cookie值,
opener.open(request)
# 9. opener包含用户登录后的Cookie值,可以直接访问那些登录后才可以访问的页面
response = opener.open("http://www.renren.com/965722397/profile")

#这里为了测试不添加cookie时访问改界面的效果
#headers = {
#    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:59.0) Gecko/20100101 #Firefox/59.0',
#}
# request = urllib.request.Request('http://www.renren.com/965722397/profile',headers=headers)
# response = urllib.request.urlopen(request)

# 10. 打印响应内容
#打印结果查看是否访问成功
print(response.code)
html = response.read()
# print(html)

with open('renren.html','wb') as f:
    f.write(html)
上一篇下一篇

猜你喜欢

热点阅读