python 标准 http 库, 无论是 python 2 还是 python 3 都有.
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 存在差距).
一个第三方库, 非 python 自带. 可以通过 pip install urllib3
安装.
urllib3 这个库和 urllib, urllib2 应该没什么关系, 顶多可以认为该库的作者为了减轻人们的认知负担沿用了 2 时代的版本命名顺序. (不过对于不懂得这段历史的初学者来说已经够混乱了.)
urllib3 支持 python 2.7+ 和 python 3.6+. 它被很多著名的库所使用, 比如 requets
和 pip
都有依赖到它.
ps: 本人最早接触爬虫是从 requests 开始, 对 urllib3 没有太多了解; 加上 urllib3 的 1.26+ 版本在 windows 上导致了灾难性的 pip 代理异常 (参考 这篇文章), 本人对它的印象比较差.
非常流行的 http 库. 它有着堪称典范的代码风格, 极具易用性 (人性化) 的接口设计等诸多优点, 是开发者最爱的 python 第三方库之一.
ps: 印象中 requests 的依赖项比较多 (不过最新的版本似乎很少了), 对于非常在意打包体积的人来说仍然需要多加关注.
如果是一些基础的, 偶尔使用到 (在自己的项目的少数模块中), 其实推荐用 python 自带的 urllib; requests 适合专注于爬虫等网络通讯项目的人员.
https://stackoverflow.com/a/63233379