urllib、urllib2、requests的区别

urllib和urllib2的区别

urllib和urllib2模块都做与请求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模块

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

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

2.示例

 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)

urllib2模块

1.urllib2模块定义的函数和类用来获取URL(主要是HTTP的),他提供一些复杂的接口用于处理: 基本认证,重定向,Cookies等。

2.常用方法和类

2.1    urllib2.urlopen(url[, data][, timeout]) #传url时候,用法同urllib里的urlopen

2.1.1    它打开URL网址,url参数可以是一个字符串url或者是一个Request对象。可选的参数timeout,阻塞操作以秒为单位,如尝试连接(如果没 有指定,将使用设置的全局默认timeout值)。实际上这仅适用于HTTP,HTTPS和FTP连接。

2.1.2    urlopen方法也可通过建立了一个Request对象来明确指明想要获取的url。调用urlopen函数对请求的url返回一个response对 象。这个response类似于一个file对象,所以用.read()函数可以操作这个response对象

2.2     class urllib2.Request(url[, data][, headers][, originreqhost][, unverifiable])

2.2.1     Request类是一个抽象的URL请求。

参数的说明如下:        URL——是一个字符串,其中包含一个有效的URL。

                                  data——是一个字符串,指定额外的数据发送到服务器,如果没有data需要发送可以为“None”。目前使用data的HTTP请求是唯一的。当请求 含有data参数时,HTTP的请求为POST,而不是GET。数据应该是缓存在一个标准的application/x-www-form- urlencoded格式中。urllib.urlencode()函数用映射或2元组,返回一个这种格式的字符串。通俗的说就是如果想向一个URL发送 数据(通常这些数据是代表一些CGI脚本或者其他的web应用)。例如在网上填的form(表单)时,浏览器会POST表单的内容,这些数据需要被以标准 的格式编码(encode),然后作为一个数据参数传送给Request对象。Encoding是在urlib模块中完成的,而不是在urlib2中完成 的。

                                 headers——是字典类型,头字典可以作为参数在request时直接传入,也可以把每个键和值作为参数调用add_header()方法来添加。作 为辨别浏览器身份的User-Agent header是经常被用来恶搞和伪装的,因为一些HTTP服务只允许某些请求来自常见的浏览器而不是脚本,或是针对不同的浏览器返回不同的版本。例 如,Mozilla Firefox浏览器被识别为“Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11”。默认情况下,urlib2把自己识别为Python-urllib/x.y(这里的xy是python发行版的主要 或次要的版本号,如在Python 2.6中,urllib2的默认用户代理字符串是“Python-urllib/2.6。下面的例子和上面的区别就是在请求时加了一个headers,模 仿IE浏览器提交请求。

requests模块

 Requests 使用的是 urllib3,继承了urllib2的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自 动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。

其他功能特性:

国际化域名和 URLs
Keep-Alive & 连接池
持久的 Cookie 会话
类浏览器式的 SSL 加密认证 
基本/摘要式的身份认证
优雅的键/值 Cookies
自动解压
Unicode 编码的响应体
多段文件上传
连接超时
支持 .netrc
适用于 Python 2.6—3.4线程安全

示例比较:

1、使用requests,它是基于urllib3开发的
import requests
from bs4 import BeautifulSoup
response = requests.get(pageUrl)
pageHtml = BeautifulSoup(response.content, 'html.parser', from_encoding="gb18030")
2、使用urllib.request
import urllib.request
from bs4 import BeautifulSoup
response = urllib.request.urlopen(pageUrl)
pageHtml = BeautifulSoup(response.read(), 'html.parser', from_encoding="gb18030")
3、经过实测,使用requests比urllib.request速度快很多,使用也方便

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值