美文网首页
Urllib库的使用九---进阶四(Cookiejar的使用)

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

作者: IT的咸鱼 | 来源:发表于2018-10-18 15:24 被阅读0次
通过上篇的代码可以看到其实是实现了获取Cookie,通过Cookie来请求网页数据的 但是这样很明显不够灵活,也不够复杂,我们有没有方便一点的做法呢?

cookiejar库 和 HTTPCookieProcessor处理器

  • 在Python处理Cookie,一般是通过cookiejar模块和 urllib模块的HTTPCookieProcessor处理器类一起使用。

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

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()

实例一

获取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模拟登录人人网

模拟登录要注意几点:

  • 登录一般都会先有一个HTTP GET,用于拉取一些信息及获得Cookie,然后再HTTP POST登录。
  • HTTP POST登录的链接有可能是动态的,从GET返回的信息中获取。
  • password 有些是明文发送,有些是加密后发送。有些网站甚至采用动态加密的,同时包括了很多其他数据的加密信息,只能通过查看JS源码获得加密算法,再去破解加密,非常困难。
  • 大多数网站的登录整体流程是类似的,可能有些细节不一样,所以不能保证其他网站登录成功
# -*- 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)

相关文章

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

    通过上篇的代码可以看到其实是实现了获取Cookie,通过Cookie来请求网页数据的 但是这样很明显不够灵活,也不...

  • Python基础库使用(一)

    python 基本库的使用(一) 使用 urllib 在 Python 2 中,有 urllib 和 urllib...

  • 常用Python爬虫库介绍

    1 urllib爬虫库 1.1 库的使用 属于python内置库,不需要提前安装 1.2 urllib中包括了四个...

  • Python中Requests库的用法

    前面讲了Python的urllib库的使用和方法,Python网络数据采集Urllib库的基本使用 ,Python...

  • 使用 Python 爬取网页数据

    1. 使用 urllib.request 获取网页 urllib 是 Python 內建的 HTTP 库, 使用 ...

  • Urllib库

    基本的请求库: urllib库的一些使用方法 urllib.parse response = urllib.req...

  • Urllib库的使用七---进阶二(代理的使用)

    各大代理IP的平台对比网址可做如下参考:https://cuiqingcai.com/5094.html Prox...

  • 02 urllib库的使用

    02 urllib库的使用 一、urllib库 1、概念 urllib 是一个用来处理网络请求的python标准库...

  • Urllib库的使用

    背景 在学习了Python的基本语法后,我们急需找个项目练练手。首先,我们自然地想到了爬虫。宏观地看,爬虫主要是为...

  • urllib库的使用

    1. urllib库的简介 urllib库是Python中一个最基本的网络请求库。可以模拟浏览器的行为,向指定的服...

网友评论

      本文标题:Urllib库的使用九---进阶四(Cookiejar的使用)

      本文链接:https://www.haomeiwen.com/subject/iifjzftx.html