python的网络请求库urllib、urllib2、urllib3、request的联系

article/2025/10/29 12:02:39

文章目录

      • 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后方法名的区别。
urllib

  • 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种方式


http://chatgpt.dhexx.cn/article/mojUR9DZ.shtml

相关文章

python3安装urllib2_python3.6想使用urllib2包怎么办

Python3.6.6或者说python3.x找不到urllib2语法问题修改之后,会报一个没有安装urllib2的包的错误。 通过pip install urllib2也会提示找不到包。(推荐学习:Python视频教程) 通过pip3 install urllib2也会提示找不到包。 这是因为builtwith依赖于urllib2包…

pythonurllib2方法_解决python3.6想使用urllib2包的方法

解决python3.6想使用urllib2包的方法 发布时间:2020-08-11 14:24:50 来源:亿速云 阅读:131 作者:小新 小编给大家分享一下解决python3.6想使用urllib2包的方法,相信大部分人都还不怎么了解,因此分享这篇文章…

python安装urllib2_Python如何安装urllib2库

urllib2 是 Python2.7 自带的模块(不需要下载,导入即可使用)。 urllib2库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。 在Python中有很多库可以用来抓取网页,我们先学习urllib2。urllib2 是 Python2.7 自带的模块(不需要下载,…

python爬虫-urllib2的使用方法详解(python3)

文章目录 python编程快速上手(持续更新中…)python爬虫从入门到精通urllib2概述python2与python3对比urlopenRequestUser-Agent添加更多的Header信息 urllib2默认只支持HTTP/HTTPS的GET和POST方法URL编码转换:urllib.parse.urlencode模拟百度…

Urllib2库丨Python爬虫基础入门系列(12)

提示:文末有福利!最新Python爬虫资料/学习指南>>戳我直达 文章目录 前言Urllib2库学习目的urlopenGET请求方式利用urllib2.Request类,添加Header信息POST请求方式抓取招聘信息思考一下 小结 总结 前言 Urllib2库 urllib2是python2.7自带的模块(不…

Hyper-V虚拟化

第一章 Hyper-V 介绍 1-1 Hyper-V发展历史 2003 年,微软收购了一家虚拟化软件公司。2004 年推出了第一个桌面虚拟化产品Virtual PC 2004,其功能类似于VMware 工作站(work station)。由于该虚拟化产品集成在操作系统之中,所以用户可以在windo…

QNX Hypervisor管理程序

QNX Hypervisor管理程序 借助 QNX 管理程序,可以将具有不同操作系统,不同可靠性和安全要求的多个嵌入式系统,整合到单个片上系统 (SoC) 中。可以轻松地将未修改的代码移动到最新的硬件上,只需在适当配置的hypervisor 管理程序虚拟…

怎么开启windows hypervisor platform,解决hypervisor platform消失无法安装的问题

正常的windows功能面板 我的 很好,没有安装windows hypervisor platform的机会,但是没关系(ps:此处描述有误中文名称应该是虚拟机监控程序平台) 然后cmd 或powershll 管理员身份运行 Dism /online /Get-Features 可以查看到hypervisor platform是禁用状态 ::%cd%代表的是执…

Android Studio安装常见问题详解——Android Emulator Hypervisor Driver for AMD Processors installation failed.

目录 一、问题描述二、解决方案2.1 开启CPU虚拟化2.2 禁用Hyper-V2.3 使用管理员命令行在驱动程序包中执行“silent_install.bat” 一、问题描述 新买的AMD轻薄本,在安装Android Studio时遇到问题: Android Emulator Hypervisor Driver for AMD Process…

Hypervisor之半虚拟化virtio

1 基本概念 virtio共享内存使用的是guest GPA,由guest virtio front-end驱动初始化队列的时候分配,在back-end驱动中,QVM或者QEMU将GPA转换到HVA或者HPA地址再读写数据。 virtio front-end通知back-end方式:访问doorbell寄存器触发…

VMware vSphere Hypervisor (ESXi) 7.0U3g安装

VMware vSphere Hypervisor“ESXi” 7.0U3g 安装 一、准备工作1、查看支持ESXI7.0U3的CPU型号;2、下载将镜像制作成安装盘的软件;3、注册vmware账号,下载ESXI7.0U3镜像; 二、安装VMware vSphere Hypervisor (ESXi) 7.0U3g三、配置…

Vmware vSphere hypervisor 虚拟化软件安装

目录 一、概述 1.1.什么是 vSphere Hypervisor? 二、U盘启动制作 2.1. ultraiso安装完成后打开文件 2.2.选择我们下载好的虚拟化软件ios 2.3.写入映像文件 2.4.写入硬盘映像,驱动器选择插入的U盘 三、 Vmware vSphere hypervisor安装 四、虚拟机…

Hypervisor---虚拟化技术简易说明

Hypervisor,虚拟机监视器(英语:virtual machine monitor,缩写为 VMM),是一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。 被Hypervisor用来执行一个或多个虚拟机器…

hypervisor - qnx

按照definition of Goldberg (1973), Hypervisor – Wikipedia: qnx hypervisor is type 2 QNX considers its hypervisor to be a type 1 (although it is a type 2)

什么是虚拟机管理程序hypervisor,什么是hypervisor type 1, hypervisor type 2

服务器虚拟化目前是IT界的一个热门话题。它的受欢迎程度和使用率一直在增长,尤其是在企业环境中。使虚拟化成为可能的是所谓的hypervisor 管理程序。服务器虚拟化允许不同的操作系统在一台服务器上运行单独的应用程序,同时仍使用相同的物理资源。这些虚拟…

了解以及区分物理机,虚拟机(hypervisor/VMM) 和 容器(Docker)的适用场景

了解以及区分物理机,虚拟机hypervisor/VMM 和 容器Docker的适用场景 Abbreviations物理机和虚拟机以及容器的区别动机motivation:为什么要有虚拟机物理机:虚拟机容器 虚拟机的种类以及他们的本质区别虚拟化方式虚拟机类型docker技术传统计算机体系结构虚…

虚拟化与hypervisor

文章目录 虚拟化HypervisorHypervisor分类Hypervisor优点Container vs HypervisorHypervisorContainer 虚拟化 虚拟化通过将公司的物理资源视为可以动态分配虚拟资源的池,从而提高了IT资源的利用率。 虚拟化涉及从物理思维到逻辑思维的转变,将IT资源视…

Hypervisor 简介

单词解释 Hypervisor:超级监督者,管理程序 虚拟化技术 概念 一种运行在基础物理服务器和操作系统之间的中间软件层,可以访问服务器上包括磁盘和内存在内的所有物理设备。Hypervisor协调着这些硬件资源的访问,以及各个虚拟机之间…

Hypervisor技术

KVM介绍 KVM内置于Linux,是内核模块;KVM可以直接利用Linux来做一些在xen中需要利用hypervisor来做的事情,比如任务调度,内存管理等等。所以相比之下,KVM更轻量,更易管理,并且版本更新也可以随着…

hypervisor详解

hypervisor:一种运行在物理服务器和操作系统之间的中间层软件,可以允许多个操作系统和应用共享一套基础物理硬件。可以将hypervisor看做是虚拟环境中的“元”操作系统,可以协调访问服务器上的所有物理设备和虚拟机,所以又称为虚拟…