返回顶部
首页 > 资讯 > 后端开发 > Python >Python中怎么利用urlliib.parse库解析URL
  • 613
分享到

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

2023-06-17 02:06:39 613人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

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

今天就跟大家聊聊有关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有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网Python频道,感谢大家的支持。

--结束END--

本文标题: Python中怎么利用urlliib.parse库解析URL

本文链接: https://lsjlt.com/news/286921.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python中怎么利用urlliib.parse库解析URL
    今天就跟大家聊聊有关Python中怎么利用urlliib.parse库解析URL,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。解析urlurlparse() 函数可以将 U...
    99+
    2023-06-17
  • Python 中怎么利用ConfigParser解析配置模块
    这篇文章将为大家详细讲解有关Python 中怎么利用ConfigParser解析配置模块,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。基本的读取配置文件-read(filename) 直接读...
    99+
    2023-06-04
  • Node.js中怎么使用URL模块解析地址
    这篇文章给大家介绍Node.js中怎么使用URL模块解析地址,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。url结构化/模块化/路径解析结构化:url.parse(urlString[...
    99+
    2024-04-02
  • python中怎么利用 mysqldb类库操作数据库
    这期内容当中小编将会给大家带来有关python中怎么利用 mysqldb类库操作数据库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。安装MySQLdbpip install MySQLdb2.代码impo...
    99+
    2023-06-02
  • PHP中利用路由组件实现URL重写与参数解析
    在使用PHP开发网站时,URL路由是一个非常重要的功能。通过URL重写和参数解析,我们可以将原本复杂的URL转换为简洁、友好的URL形式,提高用户体验和搜索引擎优化。一、URL重写URL重写是指将原本包含动态参数的URL转化为静态的、易于理...
    99+
    2023-10-21
    路由 URL重写 参数解析
  • 利用python来解析html
    引子使用python来进行抓取网页的时候,可以使用HTMLParser来解析html文档,本次就看看这个玩意怎么用实战源码获取方法请看视频地址:http://v.youku.com/v_show/id_XMzEyMzA0MTM5Mg==.h...
    99+
    2023-01-31
    python html
  • python中怎么利用sqlalchemy 操作数据库
    今天就跟大家聊聊有关python中怎么利用sqlalchemy 操作数据库,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。安装pip install sqlalchemy2....
    99+
    2023-06-02
  • 怎么在python中利用列表解析式拼接列表
    今天就跟大家聊聊有关怎么在python中利用列表解析式拼接列表,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,P...
    99+
    2023-06-14
  • 利用Python中的pandas库对cdn日志进行分析详解
    前言 最近工作工作中遇到一个需求,是要根据CDN日志过滤一些数据,例如流量、状态码统计,TOP IP、URL、UA、Referer等。以前都是用 bash shell 实现的,但是当日志量较大,日志文件数G...
    99+
    2022-06-04
    进行分析 详解 日志
  • 怎么利用Nginx实现URL重定向
    本文小编为大家详细介绍“怎么利用Nginx实现URL重定向”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么利用Nginx实现URL重定向”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. 概述老话说的好:取乎...
    99+
    2023-06-29
  • python中怎么利用cx_Oracle连接oracle数据库
    本篇文章为大家展示了python中怎么利用cx_Oracle连接oracle数据库,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。直接使用:    CheckOracle.py -...
    99+
    2023-06-04
  • node.js中怎么利用express解析post请求
    node.js中怎么利用express解析post请求,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、www-form-urlencoded...
    99+
    2024-04-02
  • 怎么利用JavaMail API 解析MIME
    本篇文章为大家展示了怎么利用JavaMail API 解析MIME,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。以前不知MIME为何物,经过一段时间研究,大体理解为邮件接受以及发送的一种标准格式。只...
    99+
    2023-06-17
  • Python 解析获取 URL 参数及使用步骤
    下文中使用的 URL 地址是:https://www.example.com/keyword=abc&id=12 Python 解析获取 URL 参数的步骤如下: 首先导入 ...
    99+
    2024-04-02
  • 怎么在python中利用递归实现一个爬虫解析器
    怎么在python中利用递归实现一个爬虫解析器?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。另外一种是配置文件预先告知的方式,你配置成什么类型,解析器就通过对应的解析规则去解析...
    99+
    2023-06-14
  • js怎么完全解析url和拼接
    这篇文章主要介绍“js怎么完全解析url和拼接”,在日常操作中,相信很多人在js怎么完全解析url和拼接问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js怎么完全解析url和拼接”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • 怎么利用python进行数值分析
    小编给大家分享一下怎么利用python进行数值分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、准备噪声是在拟合过程中常用的干扰手段,常用的噪声:统一分布 U(a,b)f ( x ) = { 1 i f a ≤ x &...
    99+
    2023-06-15
  • Python怎么使用Beautiful Soup库解析HTML和XML
    今天小编给大家分享一下Python怎么使用Beautiful Soup库解析HTML和XML的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下...
    99+
    2023-07-06
  • Python中怎么解析XML
    本篇文章给大家分享的是有关Python中怎么解析XML,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python解析XML代码示例:< text &g...
    99+
    2023-06-17
  • python中怎么用demjson解析对象
    要使用demjson库解析一个对象,可以按照以下步骤进行操作: 首先,确保已经安装了demjson库。可以使用以下命令安装: p...
    99+
    2023-10-26
    python demjson
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作