Python——深入理解urllib、urllib2及requests(requests不建议使用?)

在python中有两种方式可以发送http请求:

  1. 通过python自带的urllib模块,不需要安装,直接from urllib import request,直接使用request对象做Http请求的发送。
  2. 通过第三方的requests模块,需要pip install安装(推荐,因为API人性化)

urllib and urllib2 区别

urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能。
urllib2.urlopen accepts an instance of the Request class or a url, (whereas urllib.urlopen only accepts a url 中文意思就是:urllib2.urlopen可以接受一个Request对象或者url,(在接受Request对象时候,并以此可以来设置一个URL 的headers),urllib.urlopen只接收一个url
urllib 有urlencode,urllib2没有,这也是为什么总是urllib,urllib2常会一起使用的原因

     r = Request(url=‘http://www.mysite.com‘)
     r.add_header(‘User-Agent‘, ‘awesome fetcher‘)
     r.add_data(urllib.urlencode({‘foo‘: ‘bar‘})
     response = urllib2.urlopen(r)     #post method

urllib 模块

I. urlencode不能直接处理unicode对象,所以如果是unicode,需要先编码,有unicode转到utf8,举例:

  urllib.urlencode (u‘bl‘.encode(‘utf-8‘))

II. 示例

 import urllib       #sohu 手机主页
 url = ‘http://m.sohu.com/?v=3&_once_=000025_v2tov3&_smuid=       ICvXXapq5EfTpQTVq6Tpz‘
 resp = urllib.urlopen(url)
 page = resp.read()
 f = open(‘./urllib_index.html‘, ‘w‘)
 f.write(page)
 print dir(resp)

结果:

[‘doc‘, ‘init‘, ‘iter‘, ‘module‘, ‘repr‘, ‘close‘, ‘code‘, ‘fileno‘, ‘fp‘, ‘getcode‘, ‘geturl‘, ‘headers‘, ‘info‘, ‘next‘, ‘read‘, ‘readline‘, ‘readlines‘, ‘url‘]

 print resp.getcode(), resp.geturl(), resp.info(), resp.headers, resp.url
 #resp.url和resp.geturl()结果一样

III. 编解码示例 urllib.quote和urllib.urlencode都是编码,但用法不一样

 48     s = urllib.quote(‘This is python‘)  #编码 49     print ‘quote:\t‘+s    #空格用%20替代 50     s_un = urllib.unquote(s)    #解码 51     print ‘unquote:\t‘+s_un 52     s_plus = urllib.quote_plus(‘This is python‘)  #编码 53     print ‘quote_plus:\t‘+s_plus            #空格用+替代 54     s_unplus = urllib.unquote_plus(s_plus)       #解码 55     print ‘s_unplus:\t‘+s_unplus 56     s_dict = {‘name‘: ‘dkf‘, ‘pass‘: ‘1234‘} 57     s_encode = urllib.urlencode(s_dict)    #编码字典转换成u
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值