编码解码:

python2 用法:
urllib.urlencode() 编码
   urlparse.parse_qs()  解码 python3 用法:
  urllib.parse.urlencode() 编码
  urllib.parse.parse_qs() 解码

作用:
)把字典数据转化成URL编码
)用途
a)对URL参数进行编码
b)对post上去的form数据进行编码

示例

#python2.x
import urllib
import urlparse def urlencode():
params = {'score': 100, 'name': '爬虫基础', 'comment': 'very good'}
qs = urllib.urlencode(params) ###编码
print(qs)
unqs = urlparse.parse_qs(qs) ##解码
print unqs
if __name__ == '__main__':
urlencode()
#python3.x

import urllib
import urllib.parse def urlencode():
params = {'score': 100, 'name': '爬虫基础', 'comment': 'very good'}
qs = urllib.parse.urlencode(params) ###编码
print(qs)
unqs = urllib.parse.urlparse(qs) ##解码
print (unqs)
if __name__ == '__main__':
urlencode()

结果:


python2.x

urllib2中的两个重要概念:Openers和Handlers
  .Openers:
当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例)。
正常情况下,我们使用默认opener:通过urlopen。
但你能够创建个性的openers。 .Handles:
openers使用处理器handlers,所有的“繁重”工作由handlers处理。
每个handlers知道如何通过特定协议打开URLs,或者如何处理URL打开时的各个方面。例如HTTP重定向或者HTTP cookies。
实例:
   import http.cookiejar
import urllib2
def cookies():
cookejar = http.cookiejar.CookieJar()
hadler = urllib.request.HTTPCookieProcessor(cookiejar=cookejar)
opener = urllib.request.build_opener(hadler,urllib.request.HTTPHandler(debuglevel=1)) #####打印调试信息
s = opener.open("http://www.douban.com")
print (s.read(100))
s.close()
print ('=' * 80)
print (cookejar._cookies)
print ("=" * 80)
s = opener.open("http://www.douban.com")
s.close() cookies()
urllib2.Request
自定制headers
# -*- coding: utf-8 -*-
import urllib2 def request():
# 定制 HTTP 头
headers = {'User-Agent': 'Mozilla/5.0', 'x-my-header': 'my value'} #在http里面自定义的头一般是x开头的
req = urllib2.Request('http://blog.kamidox.com', headers=headers) #创建一个请求
s = urllib2.urlopen(req)            #打开这个请求,urlopen不仅仅可以接受一个网址作为参数,也可以接受request作为它的对象
print(s.read(100))
s.close() if __name__ == '__main__':
request()
 

urllib2.bulid-opener


    可以让我们去定制这个http的行为

    )BeseHandler及其子类

        BeseHandler是所有HTTPHandler的父类

        a.HTTPHandler(处理http请求的)

        b.HTTPSHandler(处理安全链接的请求)

        c.HTTPCookieProcessor(处理cookie的请求)

    )bulid-opener

        a.返回Handler列表,会把这个Handler都给它串起来,串起来以后,就类似于我们管道一样,当http请求应答回来的时候,它会流经这个Handler,让这个里面每一个Handler去处理不同的东西

        b.返回OpenerDirector,这个参数很重要的方法就是open,这个open就是要去打开这个远程的链接去处理这个数

    )默认会创建的Handler链

        Handler的链,实际上是一个Handler的数组,在调用这个urlOpener的时候,它默认的时候会是以下的链表,也就是,它会默认的把这个链表给你创建起来

        a.ProxyHandler(如果设置了代理)

        b.UnknownHandler(不知道什么协议的时候,它会去调)

        d.HTTPHandler(处理http的请求)

        c.HTTPDefaultEorrorHandler(处理错误的请求)

        d.HTTPRedirectHandler(处理跳转,比如http出现301,302这种应答码的时候)

        e.FTPHandler(可以去支持FTP的协议)

        f.FileHandler(可以支持本地的文件打开)

        g.HTTPEorrorProcessor(可以去处理http的错误)

        e.HTTPSHandler(如果安装了ssl模块)
实例:
# -*- coding: utf-8 -*-
import urllib2
import urllib def request_post_debug():
# POST
data = {'username': 'kamidox', 'password': 'xxxxxxxx'} ##数据体
# headers = {'User-Agent': 'Mozilla/5.0', 'Content-Type': 'plain/text'}
headers = {'User-Agent': 'Mozilla/5.0'} ###定制的头
req = urllib2.Request('http://www.douban.com', data=urllib.urlencode(data), headers=headers) //创建一个请求,这个请求是发送给豆瓣
opener = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1)) ##创建一个open打开器,如果不传参数,它就是给你传系统默认的Handler,如果我们传了参数给它,如果系统里面默认有的它就去去替换掉,如果系统没有它就去去添加
s = opener.open(req) ###用这个open去打开这个请求
print(s.read(100)) ###打印前面100个字节
s.close() if __name__ == '__main__':
Request_post_debug()
如果我创建了一个opener,那我后面的函数还想用该怎么办呢?怎么将这个opener保存起来呢?

保存opener为默认

            .urllib2.install_opener (我们可以把创建处理的opener,给它保存到urllib2这个库里面,调用urllib2的时候,就会直接去下载安装这个opener了)

            .示例:install_debug_opener
示例:
 # -*- coding: utf-8 -*-
import urllib2 def request():
# 定制 HTTP 头
headers = {'User-Agent': 'Mozilla/5.0', 'x-my-header': 'my value'}
req = urllib2.Request('http://blog.kamidox.com', headers=headers)
s = urllib2.urlopen(req)
print(s.read(100))
print(req.headers)
s.close() def request_post_debug():
# POST
data = {'username': 'kamidox', 'password': 'xxxxxxxx'}
# headers = {'User-Agent': 'Mozilla/5.0', 'Content-Type': 'plain/text'}
headers = {'User-Agent': 'Mozilla/5.0'}
req = urllib2.Request('http://www.douban.com', data=urllib.urlencode(data), headers=headers)
opener = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1))
s = opener.open(req)
print(s.read(100))
s.close() def install_debug_handler():
opener = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1),
urllib2.HTTPSHandler(debuglevel=1))
##这里能处理HTTP协议和HTTPS协议 urllib2.install_opener(opener) ##将Handler安装到系统默认区,要打开的就是我们这里要安装的opener if __name__ == '__main__':
install_debug_handler()
request()

Cookies

)cookieillib.CookieJar

  提供解析并保存cookie的接口,因为cookie有些有生命周期,还有很多参数,这个类就是提供这些cookie的处理。

)HTTPCookieProcessor

  提供自动处理cookie的功能,它的父类也是BeseHandler,所以我们可以把这个cookie串起来,这样就可以处理一些信息。

示例:handle_cookies
# -*- coding: utf-8 -*-
import urllib2 def handle_cookie():           #先定义一个处理cookie的信息
cookiejar = cookielib.CookieJar() ##先串联一个CookieJar的对象
handler = urllib2.HTTPCookieProcessor(cookiejar=cookiejar) ##创建一个HTTPCookieProcessor的对象,传入一个参数CookieJar进去 ##还需要创建一个新的handler,打印出它的调试信息
opener = urllib2.build_opener(handler, urllib2.HTTPHandler(debuglevel=1))
s = opener.open('http://www.douban.com')
print(s.read(100))
s.close()
if __name__ == '__main__':
handle_cookie()
运行结果,这个应答里面有一个set_cookie,有一个bid

在收到这个请求之后,我们的CookieJar,包含这些服务器返回的cookie,我们可以把它打印出来。代码如下:
# -*- coding: utf-8 -*-
import urllib2 def handle_cookie(): ##先定义一个处理cookie的信息
cookiejar = cookielib.CookieJar() ##先串联一个CookieJar的对象
handler = urllib2.HTTPCookieProcessor(cookiejar=cookiejar) ##创建一个HTTPCookieProcessor的对象,传入一个参数CookieJar进去
opener = urllib2.build_opener(handler, urllib2.HTTPHandler(debuglevel=1))###还需要创建一个新的handler,打印出它的调试信息
s = opener.open('http://www.douban.com')
print(s.read(100))
s.close()
print('=' * 80)
print(cookiejar._cookies) ###这个属性就是服务器所有的cookie
print('=' * 80) if __name__ == '__main__':
handle_cookie()
opener实际上是带着这些cookie信息的,那我下次再发一个请求过去的时候,它会把这个cookie也发送过去。

urllib 学习二的更多相关文章

  1. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  2. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  3. TweenMax动画库学习(二)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  4. Hbase深入学习(二) 安装hbase

    Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...

  5. Struts2框架学习(二) Action

    Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...

  6. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  7. Quartz学习--二 Hello Quartz! 和源码分析

    Quartz学习--二  Hello Quartz! 和源码分析 三.  Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...

  8. SpringCloud学习(二):微服务入门实战项目搭建

    一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...

  9. DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer

      DjangoRestFramework学习二之序列化组件.视图组件   本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组 ...

随机推荐

  1. Git简介及安装

    1 Git简介 Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. Git是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码 ...

  2. Subway POJ - 2502 最短路

    题意:给出地铁线  起点和 终点  坐地铁速度为v2  走路为v1 求起点到终点的最短距离  (答案需要四舍五入这里坑了好久) 拿给出的地铁站点 和起点终点建边即可  然后跑个迪杰斯特拉 #inclu ...

  3. Codeforces1101F Trucks and Cities 【滑动窗口】【区间DP】

    题目分析: 2500的题目为什么我想了这么久... 考虑答案是什么.对于一辆从$s$到$t$的车,它有$k$次加油的机会.可以发现实际上是将$s$到$t$的路径以城市为端点最多划分为最大长度最小的$k ...

  4. CSAPC2008 skyline

    一座山的山稜线由许多片段的45度斜坡构成,每一个片段不是上坡就是下坡. *    *   *  /\*  /\  /\/   \/\/  \/        \ 在我们眼前的所见的任何宽度为n个单位的 ...

  5. TP5调用微信JSSDK 教程 - 测试成功案例

    前提:必需了解TP5的全局配置,扩展目录,composer,依赖注入的概念: 第一步:首先配置加载官方JSSDK类 "autoload": { "files": ...

  6. Fiddler中显示IP方法

    如何在fiddler查看到请求的IP地址?就像下面这样 打开fiddler, 快捷键Ctrl+R  或者  菜单->Rules->Customize Rules…,然后在CustomRul ...

  7. 【HDU 4343】Interval query(倍增)

    BUPT2017 wintertraining(15) #8D 题意 给你x轴上的N个线段,M次查询,每次问你[l,r]区间里最多有多少个不相交的线段.(0<N, M<=100000) 限 ...

  8. 扩展资源服务器解决oauth2 性能瓶颈

    OAuth用户携带token 请求资源服务器资源服务器拦截器 携带token 去认证服务器 调用tokenstore 对token 合法性校验资源服务器拿到token,默认只会含有用户名信息通过用户名 ...

  9. 用keras实现基本的文本分类任务

    数据集介绍 包含来自互联网电影数据库的50000条影评文本,对半拆分为训练集和测试集.训练集和测试集之间达成了平衡,意味着它们包含相同数量的正面和负面影评,每个样本都是一个整数数组,表示影评中的字词. ...

  10. Hdoj 2018.母牛的故事 题解

    Problem Description 有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年初也生一头小母牛.请编程实现在第n年的时候,共有多少头母牛? Input 输入数据由多个测 ...