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

这篇具有很好参考价值的文章主要介绍了python的网络请求库urllib、urllib2、urllib3、request的联系。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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 request

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

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

from urllib import request

res = 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 request

url = "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 request

url = '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 request

url = 'http://httpbin.org/image/jpeg'
request.urlretrieve(url, '1.jpg')

3. urllib2

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

  • urllib2发起GET请求

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

import urllib2

res = 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 urllib3

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

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

import urllib3

http = 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 requests

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

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

和urllib比较示例:

###urllib

from  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'])

---------------------------------------------------------------------------------------

#####requests

import 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种方式文章来源地址https://www.toymoban.com/news/detail-412636.html

到了这里,关于python的网络请求库urllib、urllib2、urllib3、request的联系的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【已解决】requests 和 selenium对 Urllib3版本冲突

    【已解决】requests 和 selenium对 Urllib3版本冲突

    requests对urllib3要求版本低于1.23,而selenium要求urllib3高于1.26,直接用pip install requests安装的版本是旧的(1.20),最新的为1.28,同时会把你新版本的urllib3删掉,换成1.23,于是无限死循环。。 解决办法:下载最新版的requests 下载链接:https://pypi.org/project/requests/#files 随后一番解压

    2024年02月11日
    浏览(12)
  • Python urllib2详解及实例

    urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件。他以urlopen函数的形式提供了一个非常简单的接口, 这是具有利用不同协议获取URLs的能力,他同样提供了一个比较复杂的接口来处理一般情况,例如:基础验证,cookies,代理和其他。 它们通过handlers和openers的对象提供。

    2024年02月08日
    浏览(6)
  • 关于pycharm在安装requests模块时出现:urllib3 v2.0 only supports OpenSSL 1.1.1+

    关于pycharm在安装requests模块时出现:urllib3 v2.0 only supports OpenSSL 1.1.1+

    原因:是由于urllib3模块的版本过高导致的 解决办法: 1.file-setting-Project:project-python interpreter 2.点击右侧+号,在搜索框中输入urllib3 3.在左侧选中urllib3后,在右下方的specify verison下拉框中选择1.26版本 4.左下角选择install package即可        

    2024年02月12日
    浏览(8)
  • Python3中urllib请求网页报错(AttributeError: module ‘urllib‘ has no attribute ‘request‘)

    Python3中urllib请求网页报错(AttributeError: module ‘urllib‘ has no attribute ‘request‘)

    报错代码 python3.8,想用urllib库请求访问贴吧,报错代码如下: 报错信息:看到两个request亮着,说明有问题   运行后的报错 报错内容翻译: 属性错误:模块urllib模块没有属性request 报错原因: Python中出现AttributeError的错误主要有两类原因: 1. 没有引入对应正确的包 2. 工程目

    2024年02月15日
    浏览(10)
  • 【python】(十九)python常用第三方库——urllib3

    官方文档:https://urllib3.readthedocs.io/en/stable/ Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3。Urllib3提供了很多python标准库里所没有的重要特性: 线程安全 连接池管理 客户端 SSL/TLS 验证 支持 HTTP 和 SOCKS 代理 …… 通过 pip

    2024年02月13日
    浏览(56)
  • python 模块urllib3 HTTP 客户端库

    官网文档地址:https://urllib3.readthedocs.io/en/stable/reference/index.html 一、安装 二、基本使用 三、urllib3.request() 发送请求 四、urllib3.PoolManager() 创建和管理连接池,以便在发送多个 HTTP 请求时重用连接 http.request(method,url,body,fields,headers) 发送请求 method(字符串):指定请求的 HTTP 方

    2024年02月11日
    浏览(8)
  • Python 初步了解urllib库:网络请求的利器

    Python 初步了解urllib库:网络请求的利器

    目录 urllib库简介 request模块 parse模块 error模块 response模块 读取响应内容 获取响应状态码 获取响应头部信息 处理重定向 关闭响应 总结 在Python的众多库中,urllib库是一个专门用于处理网络请求的强大工具。urllib库提供了多种方法来打开和读取URLs,从而使得网络数据的获取和

    2024年03月11日
    浏览(7)
  • 【Python 错误解决】 ---- pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool

    【Python 错误解决】 ---- pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool

    1. 错误代码 2. 报错图片 3. 报错分析 大概率是网络问题,pip 提供的网速不足以支撑 backgroundremover 安装。 4. 解决办法 5. 解决结果

    2024年02月06日
    浏览(12)
  • python报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1

    python报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+ 问题分析 说明:requests包引入了urllib3,而新版本的urllib3 需要OpenSSL 1.1.1+以上版本,否则报错: ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl’ module is compiled with ‘OpenSSL 1.0.2k-fips 26 Jan 2017’. See: https://github.c

    2024年02月09日
    浏览(7)
  • python报错:ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+

    python3 安装了requests ( pip install requests ) 说明:requests包引入了urllib3,而新版本的urllib3 需要OpenSSL 1.1.1+以上版本,否则报错: ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl’ module is compiled with ‘OpenSSL 1.0.2k-fips 26 Jan 2017’. See: https://github.com/urllib3/urllib3/issues/21

    2024年02月13日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包