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


    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)
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    (个人感觉在 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

  • 相关阅读:
    前端调取摄像头并实现拍照功能
    Springboot实现国际化以及部署Linux不生效问题
    如何批量修改文件名按顺序命名
    candence画环形贴片焊盘
    vue3版本网页小游戏
    自定义Flink kafka连接器Decoding和Serialization格式
    机器学习入门教学——损失函数(最小二乘法)
    Spring统一功能
    四、浏览器渲染过程,DOM,CSSDOM,渲染,布局,绘制详细介绍
    one-hot和Embedding
  • 原文地址:https://blog.csdn.net/Likianta/article/details/126705631