我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python中怎么利用urlliib.parse库解析URL

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python中怎么利用urlliib.parse库解析URL

今天就跟大家聊聊有关Python中怎么利用urlliib.parse库解析URL,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

解析url

urlparse() 函数可以将 URL 解析成 ParseResult 对象。对象中包含了六个元素,分别为:

  • 协议(scheme)

  • 域名(netloc)

  • 路径(path)

  • 路径参数(params)

  • 查询参数(query)

  • 片段(fragment)

from urllib.parse import urlparse url='http://user:pwd@domain:80/path;params?query=queryarg#fragment' parsed_result=urlparse(url) print('parsed_result 包含了',len(parsed_result),'个元素')print(parsed_result)

结果为:

parsed_result 包含了 6 个元素ParseResult(scheme='http', netloc='user:pwd@domain:80', path='/path', params='params', query='query=queryarg', fragment='fragment')

ParseResult 继承于 namedtuple,因此可以同时通过索引和命名属性来获取 URL 中各部分的值。

为了方便起见, ParseResult 还提供了 username、 password、 hostname、 port 对 netloc 进一步进行拆分。

print('scheme  :', parsed_result.scheme)print('netloc  :', parsed_result.netloc)print('path    :', parsed_result.path)print('params  :', parsed_result.params)print('query   :', parsed_result.query)print('fragment:', parsed_result.fragment)print('username:', parsed_result.username)print('password:', parsed_result.password)print('hostname:', parsed_result.hostname)print('port    :', parsed_result.port)

结果为:

scheme  : httpnetloc  : user:pwd@domain:80path    : /pathparams  : paramsquery   : query=queryargfragment: fragmentusername: userpassword: pwdhostname: domainport    : 80

除了 urlparse() 之外,还有一个类似的 urlsplit() 函数也能对 URL 进行拆分,所不同的是, urlsplit() 并不会把 路径参数(params) 从 路径(path) 中分离出来。

当 URL 中路径部分包含多个参数时,使用 urlparse() 解析是有问题的:

url='http://user:pwd@domain:80/path2;params1/path3;params2?query=queryarg#fragment' parsed_result=urlparse(url) print(parsed_result)print('parsed.path    :', parsed_result.path)print('parsed.params  :', parsed_result.params)

结果为:

ParseResult(scheme='http', netloc='user:pwd@domain:80', path='/path2;params1/path3', params='params2', query='query=queryarg', fragment='fragment')parsed.path    : /path2;params1/path3parsed.params  : params2

这时可以使用 urlsplit() 来解析:

from urllib.parse import urlsplitsplit_result=urlsplit(url) print(split_result)print('split.path    :', split_result.path)# SplitResult 没有 params 属性

结果为:

SplitResult(scheme='http', netloc='user:pwd@domain:80', path='/path2;params1/path3;params2', query='query=queryarg', fragment='fragment')split.path    : /path2;params1/path3;params2

若只是要将 URL 后的 fragment 标识拆分出来,可以使用 urldefrag() 函数:

from urllib.parse import urldefrag url = 'http://user:pwd@domain:80/path2;params1/path3;params2?query=queryarg#fragment' d = urldefrag(url)print(d)print('url     :', d.url)print('fragment:', d.fragment)

结果为:

DefragResult(url='http://user:pwd@domain:80/path2;params1/path3;params2?query=queryarg', fragment='fragment')url     : http://user:pwd@domain:80/path2;params1/path3;params2?query=queryargfragment: fragment

组建URL

ParsedResult 对象和 SplitResult 对象都有一个 geturl() 方法,可以返回一个完整的 URL 字符串。

print(parsed_result.geturl())print(split_result.geturl())

结果为:

http://user:pwd@domain:80/path2;params1/path3;params2?query=queryarg#fragmenthttp://user:pwd@domain:80/path2;params1/path3;params2?query=queryarg#fragment

但是 geturl() 只在 ParsedResultSplitResult 对象中有,若想将一个普通的元组组成 URL,则需要使用 urlunparse() 函数:

from urllib.parse import urlunparseurl_compos = ('http', 'user:pwd@domain:80', '/path2;params1/path3', 'params2', 'query=queryarg', 'fragment')print(urlunparse(url_compos))

结果为:

http://user:pwd@domain:80/path2;params1/path3;params2?query=queryarg#fragment

相对路径转换绝对路径

除此之外,urllib.parse 还提供了一个 urljoin() 函数,来将相对路径转换成绝对路径的 URL。

from urllib.parse import urljoin print(urljoin('http://www.example.com/path/file.html', 'anotherfile.html'))print(urljoin('http://www.example.com/path/', 'anotherfile.html'))print(urljoin('http://www.example.com/path/file.html', '../anotherfile.html'))print(urljoin('http://www.example.com/path/file.html', '/anotherfile.html'))

结果为:

http://www.example.com/path/anotherfile.htmlhttp://www.example.com/path/anotherfile.htmlhttp://www.example.com/anotherfile.htmlhttp://www.example.com/anotherfile.html

查询参数的构造和解析

使用 urlencode() 函数可以将一个 dict 转换成合法的查询参数:

from urllib.parse import urlencode query_args = {    'name': 'dark sun',    'country': '中国'} query_args = urlencode(query_args)print(query_args)

结果为:

name=dark+sun&country=%E4%B8%AD%E5%9B%BD

可以看到特殊字符也被正确地转义了。

相对的,可以使用 parse_qs() 来将查询参数解析成 dict。

from urllib.parse import parse_qsprint(parse_qs(query_args))

结果为:

{'name': ['dark sun'], 'country': ['中国']}

如果只是希望对特殊字符进行转义,那么可以使用 quote 或 quote_plus 函数,其中 quote_plus 比 quote 更激进一些,会把 :/ 一类的符号也给转义了。

from urllib.parse import quote, quote_plus, urlencode url = 'http://localhost:1080/~hello!/'print('urlencode :', urlencode({'url': url}))print('quote     :', quote(url))print('quote_plus:', quote_plus(url))

结果为:

urlencode : url=http%3A%2F%2Flocalhost%3A1080%2F%7Ehello%21%2Fquote     : http%3A//localhost%3A1080/%7Ehello%21/quote_plus: http%3A%2F%2Flocalhost%3A1080%2F%7Ehello%21%2F

可以看到 urlencode 中应该是调用 quote_plus 来进行转义的。

逆向操作则使用 unquote 或 unquote_plus 函数:

from urllib.parse import unquote, unquote_plus encoded_url = 'http%3A%2F%2Flocalhost%3A1080%2F%7Ehello%21%2F'print(unquote(encoded_url))print(unquote_plus(encoded_url))

结果为:

http://localhost:1080/~hello!/http://localhost:1080/~hello!/

你会发现 unquote 函数居然能正确地将 quote_plus 的结果转换回来。

看完上述内容,你们对Python中怎么利用urlliib.parse库解析URL有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网行业资讯频道,感谢大家的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python中怎么利用urlliib.parse库解析URL

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python中怎么利用urlliib.parse库解析URL

今天就跟大家聊聊有关Python中怎么利用urlliib.parse库解析URL,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。解析urlurlparse() 函数可以将 URL 解析
2023-06-17

Python 中怎么利用ConfigParser解析配置模块

这篇文章将为大家详细讲解有关Python 中怎么利用ConfigParser解析配置模块,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.基本的读取配置文件-read(filename) 直
2023-06-04

python中怎么利用 mysqldb类库操作数据库

这期内容当中小编将会给大家带来有关python中怎么利用 mysqldb类库操作数据库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.安装MySQLdbpip install MySQLdb2.代码im
2023-06-02

怎么在python中利用列表解析式拼接列表

今天就跟大家聊聊有关怎么在python中利用列表解析式拼接列表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,P
2023-06-14

python中怎么利用sqlalchemy 操作数据库

今天就跟大家聊聊有关python中怎么利用sqlalchemy 操作数据库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.安装pip install sqlalchemy2.代码如
2023-06-02

PHP中利用路由组件实现URL重写与参数解析

在使用PHP开发网站时,URL路由是一个非常重要的功能。通过URL重写和参数解析,我们可以将原本复杂的URL转换为简洁、友好的URL形式,提高用户体验和搜索引擎优化。一、URL重写URL重写是指将原本包含动态参数的URL转化为静态的、易于理
2023-10-21

利用Python中的pandas库对cdn日志进行分析详解

前言 最近工作工作中遇到一个需求,是要根据CDN日志过滤一些数据,例如流量、状态码统计,TOP IP、URL、UA、Referer等。以前都是用 bash shell 实现的,但是当日志量较大,日志文件数G、行数达数千万亿级时,通过 she
2022-06-04

python中怎么利用cx_Oracle连接oracle数据库

本篇文章为大家展示了python中怎么利用cx_Oracle连接oracle数据库,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。直接使用: CheckOracle.py -H [remote_
2023-06-04

怎么利用JavaMail API 解析MIME

本篇文章为大家展示了怎么利用JavaMail API 解析MIME,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。以前不知MIME为何物,经过一段时间研究,大体理解为邮件接受以及发送的一种标准格式。只
2023-06-17

怎么在python中利用递归实现一个爬虫解析器

怎么在python中利用递归实现一个爬虫解析器?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。另外一种是配置文件预先告知的方式,你配置成什么类型,解析器就通过对应的解析规则去解析
2023-06-14

Python怎么使用Beautiful Soup库解析HTML和XML

今天小编给大家分享一下Python怎么使用Beautiful Soup库解析HTML和XML的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起
2023-07-06

Python中怎么解析XML

本篇文章给大家分享的是有关Python中怎么解析XML,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python解析XML代码示例:< text > < font size="
2023-06-17

python中怎么用demjson解析对象

要使用demjson库解析一个对象,可以按照以下步骤进行操作:首先,确保已经安装了demjson库。可以使用以下命令安装:pip install demjson导入demjson库:import demjson定义一个JSON字符串或对象:
2023-10-26

怎么利用python进行数值分析

小编给大家分享一下怎么利用python进行数值分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、准备噪声是在拟合过程中常用的干扰手段,常用的噪声:1.统一分布 U(a,b)f ( x ) = { 1 i f a ≤ x
2023-06-15

Android应用中的html怎么利用jsoup进行解析

Android应用中的html怎么利用jsoup进行解析?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.jsoup介绍jsoup 是一款Java 的HTML解析器,可直接
2023-05-31

Python中怎么利用toolz库实现函数式编程

本篇文章给大家分享的是有关Python中怎么利用toolz库实现函数式编程,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用 toolz 库来构建。 这个库具有操作此类函数的函
2023-06-17

php中怎么利用expat方式解析xml文件

这篇文章将为大家详细讲解有关php中怎么利用expat方式解析xml文件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。test.xml:
2023-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录