python url转码_Python如何实现转换URL详解
设计一个算法,将URL转换成5部分,分别是:schema、netloc、path、query_params、fragment。
问题
URL的中文名叫统一资源定位符,就是咱们常说的网址,设计一个算法,将URL转换成5部分,分别是:schema、netloc、path、query_params、fragment。
:///?#
一图胜千言:
应用场景
在实际应用场景中,有些聚合网站会把URL里面netloc提取出来。
分析
这里没有什么特别复杂的算法,因为每部分都有一个特别的字符,所以,如果你熟练Python的字符串操作和正则表达式使用的话那么就很简单。
知识点
字符串的常用方法split、find、join、lower、切片的使用,re模块下面的常用方法。另外还有关于如何使用 namedtuple 定义一个简单类的操作
实现
第一种方式使用字符串提供的方法,就是根据关键字符进行切分。整体思路是利用字符串的切片功能不断进行切分,代码稍显复杂。
URL = namedtuple("URL", ["schema", "netloc", "path", "params", "fragment"])
def url_parse1(url):
assert url.startswith("http")
# 初始化每部分为空
schema = netloc = params = fragment = path = None
# 从 :// 切分 url,前面部分是shema
i = url.find('://')
if i > 0:
schema = url[:i]
url = url[i + 3:]
# 获取netloc
for c in "/?#": # 三个分隔符的顺利很重要
a = url.find(c)
if a > 0: # 只要有三个字符中的任意字符,立即切分,前部分就是netloc,剩下的部分进行后续处理
netloc, url = url[0:a], url[a:]
break
else:
netloc, url = url, '' # 如果三个分隔符都不在url中,那么这是一个只包含
# 同样的方式获取path
for c in "?#":
a = url.find(c)
if a > 0:
path, url = url[0:a], url[a:]
break
else:
path, url = url or None, ''
if "#" in url:
url, fragment = url.split("#", 1)
if '?' in url:
url, params = url.split('?', 1)
return URL(schema=schema, netloc=netloc, path=path, params=_params_parse(params), fragment=fragment)
def _params_parse(params):
if not params:
return None
pairs = [s for s in params.split('&')]
param_dict = dict()
for pair in pairs:
k, v = pair.split('=', 1)
param_dict[k] = v
return param_dict
第二种方式就是用正则表达式,主要考验你写正则的能力
def url_parse2(url):
rex = r'^(http[s]?):\/\/([^\/\s]+)([\/\w\-\.]+[^#?\s]*)?(\?([^#]*))?(#(.*))?$'
schema = netloc = params = fragment = path = ''
pattern = re.compile(rex)
match = pattern.match(url)
if match:
schema = match.group(1)
netloc = match.group(2)
path = match.group(3)
params = match.group(5)
fragment = match.group(7)
return URL(schema=schema, netloc=netloc, path=path, params=_params_parse(params), fragment=fragment)
通过正则表达式的分组功能提取每部分,关于正则表达式推荐两个资源
Python中正则表达式介绍, 这是一篇比较完整介绍Python中正则表达式的文章,如果你能读懂里面的每句话,并且实践后,你一定能写出上面这样的表达式出来。
当然,你也可以直接使用urlparse模块中现成的方式来实现。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
python url转码_Python如何实现转换URL详解相关推荐
- python url中文转码_python实现中文转换url编码的方法
本文实例讲述了python实现中文转换url编码的方法.分享给大家供大家参考,具体如下: 今天要处理百度贴吧的东西.想要做一个关键词的list,每次需要时,直接添加 到list里面就可以了.但是添加到 ...
- python如何强制转换数据类型_python数据类型强制转换实例详解
如果是字符串进行强制转换, 仅仅就是在原数据类型的两边套上引号 2.list : 强制转换成列表""" 如果是字符串,会把每一个字符都单独作为一个元素放到新的列表中 如果 ...
- python语言格式化输出_Python format()格式化输出方法详解
原标题:Python format()格式化输出方法详解 format() 方法的语法格式如下: str.format(args) 此方法中,str 用于指定字符串的显示样式:args 用于指定要进行 ...
- python协程库_python中协程的详解(附示例)
本篇文章给大家带来的内容是关于python中协程的详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 协程,又称微线程,纤程.英文名Coroutine 协程看上去也是子程序 ...
- python中字符串乘法_python leetcode 字符串相乘实例详解
给定两个以字符串形式表示的非负整数 num1 和 num2 ,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2", ...
- python怎样实现封装_Python底层封装实现方法详解
Python底层封装实现方法详解 这篇文章主要介绍了Python底层封装实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 事实上,pyth ...
- python实现括号匹配算法_Python实现括号匹配方法详解
这篇文章主要简介了python实现括号匹配方法详解,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下 1.用一个栈[python中可以用List]就可 ...
- python音频转数组_python音频处理的示例详解
准备工作: 首先,我们需要 import 几个工具包,一个是 python 标准库中的 wave 模块,用于音频处理操作,另外两个是 numpy 和 matplot,提供数据处理函数. 一:读取本地音 ...
- python imread的用法_Python imread、newaxis用法详解
这篇文章主要简介了python imread.newaxis用法详解,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下 一:imread 用来读取图片 ...
最新文章
- 自由意志不存在?神经科学能证明不?
- xend: No such file or directory. Is xend running? 问题
- GPU 原理解密(一)画个三角形居然这么难
- linux用unzip解压.zip文件失败解决方案
- html 替代table,Iframe的缺点,div或者table成为替代者
- Virtual Treeview 5 0 0的安装以及入门
- os.path.join()函数用法
- 7 学大厂,拓展基础组件封装思路 BAT?TMD
- n平方的求和公式_高中数学:数列求和及数列的综合应用,掌握常见模型
- kafka依赖_Kafka集群搭建及必知必会
- break 和 continue
- 麦肯锡:数字化转型四步法
- Laravel5.6 模块化公众号与小程序系统项目实战
- c语言int转为dint,【转】IQMATH使用
- linux rpm 装 mac,linux之 rpm,yum
- 前端基础进阶(三)-史上最详细的变量对象详解
- 数据挖掘技术的算法与应用读书报告
- Wireshark基本介绍
- C++电话号码转对应字母
- houmee实习日记4.17
热门文章
- android系统支持4T硬盘吗,电脑是否有可能,支持3T硬盘,但不支持4T硬盘
- 苹果净利润同比下滑19%,大中华区下滑30%;养老基金将入股市投资,首批可能达2000亿元
- Flutter36,资深Android面试题
- Serverless 风格微服务的持续交付(上):架构案例
- 最新版表情包小程序源码无需服务器
- 萨提亚领衔主题演讲,带领高管和MVP合影,预告Julia女神的演讲中将有我的.NET Core实践
- 小米手机与HBuilder连接的问题解决
- PC端-中文转拼音后续问题
- 白鹭引擎egret打包成微信小游戏
- 毕业一年,工作一年,有收获,有失去,有遗憾,但仍一往无前 (征文)