当前位置: 首页 > 工具软件 > urllib3 > 使用案例 >

Python urllib, urllib2, urllib3 以及 requests 的区别 (附个人一些看法)

龚德本
2023-12-01

urllib

python 标准 http 库, 无论是 python 2 还是 python 3 都有.

urllib2

urllib2 是 只存在于 python 2 的一个 http 标准库.

在 python 2 时代, 由于 urllib 的功能过于基础和简陋, 于是官方做了大量重新设计, 推出了 urllib2.

值得注意的是, urllib2 并不能完全独立使用, 一些比较基础的功能仍然需要从 urllib 中导入, 于是你在 python 2 写成的代码中可能会看到 “urllib” 和 “urllib2” 同时存在的 “奇景”:

# python 2 代码演示
from urllib import urlencode
from urllib2 import Request, urlopen

req = Request(url='http://www.example.com')
req.add_header('User-Agent', 'example fetcher')
req.add_data(urlencode({'foo', 'bar'}))
resp = urlopen(req)
...

(个人感觉在 python 2 时代用 python 标准库做网络通讯并不友好.)

值得庆幸的是, python 3 已经移除了 urllib2, 只留下 urllib 标准库, 且 urllib 在功能和易用性做了很大完善, 包含了许多常用的功能 (尽管在人性化方面和 requests 存在差距).

urllib3

一个第三方库, 非 python 自带. 可以通过 pip install urllib3 安装.

urllib3 这个库和 urllib, urllib2 应该没什么关系, 顶多可以认为该库的作者为了减轻人们的认知负担沿用了 2 时代的版本命名顺序. (不过对于不懂得这段历史的初学者来说已经够混乱了.)

urllib3 支持 python 2.7+ 和 python 3.6+. 它被很多著名的库所使用, 比如 requetspip 都有依赖到它.

ps: 本人最早接触爬虫是从 requests 开始, 对 urllib3 没有太多了解; 加上 urllib3 的 1.26+ 版本在 windows 上导致了灾难性的 pip 代理异常 (参考 这篇文章), 本人对它的印象比较差.

requests

非常流行的 http 库. 它有着堪称典范的代码风格, 极具易用性 (人性化) 的接口设计等诸多优点, 是开发者最爱的 python 第三方库之一.

ps: 印象中 requests 的依赖项比较多 (不过最新的版本似乎很少了), 对于非常在意打包体积的人来说仍然需要多加关注.

总结

如果是一些基础的, 偶尔使用到 (在自己的项目的少数模块中), 其实推荐用 python 自带的 urllib; requests 适合专注于爬虫等网络通讯项目的人员.

参考

https://stackoverflow.com/a/63233379

 类似资料: