文章目录

  • 1. 简介
  • 2. urllib
  • 3. urllib2
  • 4. urllib3
  • 5. requests
  • 6. 相关文章

1. 简介

urllib、urllib2、urllib3、request均能通过网络访问互联网上的资源文件,它们通过使用统一资源定位符(URL)并结合re模块完成很多意想不到的操作。

  • urllib:Python2和Python3内置的网络请求库,Python3的urllib实际是Python2版本中urllib和urllib2的合并
  • urllib2:它只存在于Python2版本的内置库中,功能与urllib基本类似,主要是urllib的增强。urllib、urllib2都是python的内置标准库;
  • urllib3:Python2和Python3均可以使用,但这不是标准库,需要使用pip安装使用,urllib3提供了线程安全池和文件post等,该模块是服务于升级的http 1.1标准,且拥有高效http连接池管理及http代理服务的功能库,但其并非python内
  • requests:requests是基于urllib3封装的,继承了urllib2的所有特性,遵循Apache2 Licensed开源协议的HTTP库,支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。如他的口号HTTP for Humans所说,这才是给人用的HTTP库,实际使用过程中更方便,能够大大的提高使用效率,缩短写代码的时间。

注意: 在Python2中urllib和urllib2一般搭配使用的(不然Python2整两个内置库干嘛),urllib具有urllib2没有的功能,而urllib2具有urllib没有的功能。如urllib2可以接受请求对象来设置URL请求的头,urllib只接受URL;urllib提供用于生成GET查询字符串的urlencode方法,urllib2没有这样的函数。这就是为什么urllib经常与urllib2一起使用的原因之一。

2. urllib

urllib这个Python标准库基本上包含了基础的网络请求功能,以下urllib的演示均为Python3中的用法,Python2中单独用urllib会比较难受,上面也提到了它最好配合urllib2一起使用。

  • urllib发起GET请求

urlopen()方法发起请求,read()方法获取网页数据

from urllib import requestres = request.urlopen("http://httpbin.org/get")
print(res.read().decode())  # red()方法读取的数据是bytes的二进制格式,需要解码
  • urllib发起POST请求

urlopen()默认是GET方式请求,当传入data参数时会发起POST请求,此时传递的参数必须时bytes格式

from urllib import requestres = request.urlopen("http://httpbin.org/post", data=b'hello=world')
print(res.read().decode())
  • urllib为请求添加Headers

通过urllib发起的请求默认的头信息是"User-Agent": “Python-urllib/3.6”,一般网站会验证请求头的合法性,如果需要修改可以通过urllib.request中的Request对象

from urllib import requesturl = "http://httpbin.org/get"
headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}req = request.Request(url=url, headers=headers) # 传递的Request对象
res = request.urlopen(req)
print(res.read().decode())

此时httpbin网站返回的内容如下:

{"args": {},"headers": {"Accept-Encoding": "identity","Host": "httpbin.org","User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"},"origin": "210.33.11.241, 210.33.11.241","url": "https://httpbin.org/get"
}
  • urllib制定proxy代理

在使用爬虫时经常会配置代理隐藏我们的IP地址

from urllib import requesturl = 'http://httpbin.org/ip'
proxy = {'http': '117.95.200.71:9999', 'https': '183.154.54.188:9999'} # 可以使用西刺代理配置# 创建代理处理器
proxies = request.ProxyHandler(proxy)
# 创建opener对象
opener = request.build_opener(proxies)resp = opener.open(url)
print(resp.read().decode())
  • urllib下载数据至本地
from urllib import requesturl = 'http://httpbin.org/image/jpeg'
request.urlretrieve(url, '1.jpg')

3. urllib2

urllib2的用法其实基本和urllib相似,且它只存在于Python2版本,它的使用时需要配合urllib一起使用,要说它和urllib的区别还要看下面这个表,下表主要说明了在Python2中的urllib、urllib2中的方法整合到Python3后方法名的区别。

  • urllib2发起GET请求

这里展示了一个官方使用urllib2的GET请求

import urllib2res = urllib2.urlopen("http://httpbin.org/get")
print res.read().decode()

4. urllib3

urllib3说一个HTTP客户端Python库,Python2和Python3在未安装的情况下均可以使用pip install urllib3即可安装,它提供了很多urllib库中没有的重要特性: 线程安全 连接池 客户端SSL/TLS验证 文件分部编码上传 协助处理重复请求和HTTP重定位 支持gzip和deflate压缩编码 支持HTTP和SOCKS代理 100%测试覆盖率

  • urllib3发起GET请求

urllib3主要的特点就是在请求之前需要创建一个连接池对象

import urllib3http = urllib3.PoolManager()  # 线程池生成请求
res = http.request('GET', 'http://httpbin.org/get')
print(res.data.decode())
  • urllib3发起POST请求

post请求只需要将request()方法的第一个参数改为POST,并设置fields参数即可

import urllib3http = urllib3.PoolManager()  # 线程池生成请求
res = http.request('POST', 'http://httpbin.org/post', fields={'hello': 'world'})
print(res.data.decode())
  • urllib3设置headers

设置headers的方法和设置参数一样方便,只需要加入headers参数即可

headers = {'X-Something': 'value'}
res = http.request('POST', 'http://httpbin.org/post', headers=headers, fields={'hello': 'world'})

5. requests

最后介绍一个杀手级神器——requests,你会发现它一样也很好用,requests使用了urllib3的库,并且继承了所有urllib2的特性,最关键的是它不需要urllib3一样在编码时收到开启线程池,简单粗暴,不过它同样也要使用pip install requests安装。另外,requests会自动实现持久连接keep-alive

格外简单的演示:

import requestsres = requests.get('http://httpbin.org/get')
print(res.text)

在实际使用中推荐使用后两种,因为毕竟方便,而若时没有安装这些库的情况下,Python3的urllib也是一个不错的选择。

和urllib比较示例:

###urllibfrom  urllib import request,parse
import json
if __name__ == '__main__':while True:baseurl = 'http://fanyi.baidu.com/sug'keyword = input('请输入你要查询的单词:')data = {'kw': keyword}data = parse.urlencode(data).encode()  # 需要给数据编码,现在data是bytes格式,#调试用的的话可以输入以下代码(已注释)#data = parse.urlencode(data)#print(data)rsp = request.urlopen(baseurl, data=data)json_data = rsp.read().decode()#解码后的数据是json格式,所以要import json#print(json_data)json_data = json.loads(json_data)for i in json_data['data']:print(i['k'], '---->', i['v'])---------------------------------------------------------------------------------------#####requestsimport requests
if __name__ == '__main__':while True:baseurl = 'http://fanyi.baidu.com/sug'keyword = input('请输入你要查询的单词:')data = {'kw': keyword}#这里不用给data进行编码#但是下面要指明post方法#rsp=requests.request('post',url=baseurl,data=data)#上下两代码等价rsp = requests.post(url=baseurl, data=data)#而这里也不用导入 json模块,直接使用对象的json()方法即可json_data = rsp.json()for i in json_data['data']:print(i['k'], '---->', i['v'])
总的来说,requests将urlib进行了更高级的封装,不用人为的编码解码,将其自动化,

6. 相关文章

  • requests.session()的用法

  • Requsets库的基本使用

  • requests.get()和requests.session.get()的区别与联系

  • python requests timeout详解

  • Python中requests模块源码分析:requests是如何调用urllib3的

  • Python3中进行HTTP请求的4种方式

python的网络请求库urllib、urllib2、urllib3、request的联系相关推荐

  1. Python 深入浅出 - 网络请求库 Requests

    Requests 是用 Python 语言编写的,基于 urllib,采用 Apache2 Licensed 开元协议的 HTTP 库,它比 urllib 更加方便,编写爬虫和测试服务器响应数据时经常 ...

  2. 【网络爬虫】(1) 网络请求,urllib库介绍

    各位同学好,今天开始和各位分享一下python网络爬虫技巧,从基本的函数开始,到项目实战.那我们开始吧. 1. 基本概念 这里简单介绍一下后续学习中需要掌握的概念. (1)http 和 https 协 ...

  3. 「Python 编程」编码实现网络请求库中的 URL 解析器

    相信各位 Python 开发者都用过 Requests 库,有些朋友还用过 WebSockets 库.这里回顾一下它们的基本用法,例如使用 Requests 库向目标网站发出 GET 请求: impo ...

  4. Python网络请求库Requests,妈妈再也不会担心我的网络请求了(一)

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 极客导航 即可关注,每个工作日都有文章更新. 一.概况 网络请求可能是每门语言比较重要的一部分了,在Python语言中,虽然有urll ...

  5. Python网络请求库Requests,妈妈再也不会担心我的网络请求了(二)

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 极客导航 即可关注,每个工作日都有文章更新. 一.概况 接着上篇说,如果你真以为Requests网络请求库只有Get请求和Post请求 ...

  6. python爬虫 - python requests网络请求简洁之道

    转自:python爬虫 - python requests网络请求简洁之道 requests简介 requests是一个很实用的Python HTTP客户端库,编写爬虫和测试服务器响应数据时经常会用到 ...

  7. Python爬虫网络请求 requests(get、post)

    Python网络请求模块 urllib Urllib 库,它是 Python 内置的 HTTP 请求库,也就是说我们不需要额外安装即可使用,它包含四个模块 第一个模块 request,它是最基本的 H ...

  8. Python爬虫下一代网络请求库httpx和parsel解析库测评

    Python网络爬虫领域两个最新的比较火的工具莫过于httpx和parsel了.httpx号称下一代的新一代的网络请求库,不仅支持requests库的所有操作,还能发送异步请求,为编写异步爬虫提供了便 ...

  9. Python 爬虫下一代网络请求库 httpx 和 parsel 解析库测评

    这是「进击的Coder」的第 437 篇技术分享 作者:大江狗 来源:Python Web与Django开发 " 阅读本文大概需要 8 分钟. " Python 网络爬虫领域两个最 ...

最新文章

  1. SqlServer基础之(触发器)
  2. 博主新书:《大数据日知录:架构与算法》目录
  3. 编译linux内核时出错
  4. python对数组的操作_Python对数组的基本操作
  5. java 线程 condition_Java编程中实现Condition控制线程通信
  6. 赞一个 kindle电子书有最新的计算机图书可买了【Docker技术入门与实战】
  7. 苹果mac交互原型设计软件:Axure RP
  8. 解决VisualStudio2008下asp.net mvc开发向View中添加服务器控件崩溃的问题
  9. Python-win32com模块
  10. 多媒体计算机与一般计算机,计算机和多媒体计算机的区别
  11. 联想计算机BIOS密码忘记了,联想笔记本CMOS(BIOS)密码清除
  12. Iredmail搭建
  13. 两阶段最小二乘法原理_R语言工具变量与两阶段最小二乘法
  14. ADC芯片——AD7705最详细讲解(STM32)
  15. 奥城大学计算机专业,2018年美国大学硕士双录取最全名单
  16. 大连超级计算机,ASC19世界大学生超级计算机竞赛在我校圆满落幕
  17. 算法中快慢指针的应用(Java)
  18. Hazelcast IMDG参考中文版手册-第四章-配置
  19. 从零开始搭建仿抖音短视频APP-后端消息业务模块开发(2)-基础版完结篇
  20. 王川:小米盒子的产品观

热门文章

  1. gnu嵌入汇编,内嵌汇编详细的介绍
  2. BLE芯片PHY6222---ADC采集精度
  3. Tomcat响应时间过长,超时报错的解决办法。
  4. 第5节-AxureRP 9快捷键大全 | 剑雨Axure RP9系列【基础】
  5. F22 猛禽战斗机 攻略
  6. PGPool-II+PG流复制实现HA主备切换
  7. ImpREC手工指定IAT中的表项值
  8. 新浪短网址api接口 - t.cn 短链接生成
  9. 微信小程序下载文件和转发文件给好友总结
  10. Spine之六——纹理打包Texture packing