python内置函数urllib

python内置函数urllib

urllib是python内置一个处理url的函数,在Python3中还有urllib3,但urllib3基本上可以使用requests替代

官方文档:https://docs.python.org/3.7/library/urllib.html#module-urllib

python内各种urlib的区别

urllib 侧重于 url 基本的请求构造,urllib2侧重于 http 协议请求的处理,而 urllib3是服务于升级的http 1.1标准,且拥有高效 http连接池管理及 http 代理服务的功能库,从 urllib 到 urllib2和 urllib3是顺应互联应用升级浪潮的,这股浪潮从通用的网络连接服务到互联网网络的头部应用:支持长连接的 http 访问,网络访问不断的便捷化。

urllib功能介绍(主要介绍parse):

  • urllib.request 用于打开和读取url
  • urllib.error 包含urllib.request提出的异常
  • urllib.parse 解析url
  • urllib.robotparser 解析机器人。txt文件

URL Parsing

URL解析函数的重点是将URL字符串拆分为其组件,或者将URL组件组合为URL字符串。

urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)

将URL解析为六个组件,返回一个6元组。这对应于URL的一般结构:scheme://netloc/path;每个元组项都是一个字符串,可能为空。组件没有被分割成更小的部分(例如,网络位置是一个字符串),并且%转义没有扩展。上面所示的分隔符不是结果的一部分,除了path组件中的前导斜杠(如果存在的话会保留它)。例如:

>>> from urllib.parse import urlparse
>>> o = urlparse("http://www.cwi.nl:80/%7Eguido/Python.html")
>>> o   # doctest: +NORMALIZE_WHITESPACE
ParseResult(scheme="http", netloc="www.cwi.nl:80", path="/%7Eguido/Python.html",
            params="''", query="", fragment="")
>>> o.scheme
"http"
>>> o.port
80
>>> o.geturl()
"http://www.cwi.nl:80/%7Eguido/Python.html"

遵循RFC 1808中的语法规范,urlparse只在netloc由' // '正确引入时才识别它。否则,输入被假定为一个相对URL,因此从一个路径组件开始。

 >>> from urllib.parse import urlparse
 >>> urlparse("//www.cwi.nl:80/%7Eguido/Python.html")
 ParseResult(scheme="", netloc="www.cwi.nl:80", path="/%7Eguido/Python.html",
            params="", query="", fragment="")
 >>> urlparse("www.cwi.nl/%7Eguido/Python.html")
 ParseResult(scheme="", netloc="", path="www.cwi.nl/%7Eguido/Python.html",
            params="", query="", fragment="")
 >>> urlparse("help/Python.html")
 ParseResult(scheme="", netloc="", path="help/Python.html", params="",
            query="", fragment="")

将列表元素拼接成url

from urllib import parse
# 将列表元素拼接成url
url = ["http", "www", "baidu", "com", "dfdf", "eddffa"] # 这里至少需要6个元素
print(parse.urlunparse(url))
# 下面是结果 http://www/baidu;com?dfdf#eddffa

urllib.parse.urljoin()

# 连接两个参数的url, 将第二个参数中缺的部分用第一个参数的补齐,如果第二个有完整的路径,则以第二个为主
print(parse.urljoin("https://movie.douban.com/", "index"))
print(parse.urljoin("https://movie.douban.com/","https://accounts.douban.com/login"))
# 下面是结果
https://movie.douban.com/index6     https://accounts.douban.com/login

urlencode

urllib库里面有个urlencode函数,可以把key-value这样的键值对转换成我们想要的格式,返回的是a=1&b=2这样的字符串,比如:

>>> from urllib import urlencode
>>> data = {
...     "a": "test",
...     "name": "魔兽"
... }
>>> print(urlencode(data))
# a=test&name=%C4%A7%CA%DE
如果只想对一个字符串进行urlencode转换,怎么办?urllib提供另外一个函数:quote()

>>> from urllib import quote
>>> quote("魔兽")
# '%C4%A7%CA%DE'

urldecode

当urlencode之后的字符串传递过来之后,接受完毕就要解码了——urldecode。urllib提供了unquote()这个函数,可没有urldecode()!

>>> from urllib import unquote
>>> unquote("%C4%A7%CA%DE")
"\xc4\xa7\xca\xde"
>>> print unquote("%C4%A7%CA%DE")
魔兽
223916_bL9y_2663968.jpg
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值