Python如何实现转换URL详解


Posted in Python onJuly 02, 2019

设计一个算法,将URL转换成5部分,分别是:schema、netloc、path、query_params、fragment。

问题

URL的中文名叫统一资源定位符,就是咱们常说的网址,设计一个算法,将URL转换成5部分,分别是:schema、netloc、path、query_params、fragment。

<scheme>://<netloc>/<path>?<query_params>#<fragment>

一图胜千言:

Python如何实现转换URL详解

应用场景

在实际应用场景中,有些聚合网站会把URL里面netloc提取出来。

Python如何实现转换URL详解

分析

这里没有什么特别复杂的算法,因为每部分都有一个特别的字符,所以,如果你熟练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 相关文章推荐
怎样使用Python脚本日志功能
Aug 14 Python
python用post访问restful服务接口的方法
Dec 07 Python
BP神经网络原理及Python实现代码
Dec 18 Python
Python判断telnet通不通的实例
Jan 26 Python
python实现两个dict合并与计算操作示例
Jul 01 Python
Django模板语言 Tags使用详解
Sep 09 Python
Python 正则表达式爬虫使用案例解析
Sep 23 Python
在Python中等距取出一个数组其中n个数的实现方式
Nov 27 Python
python列表生成器迭代器实例解析
Dec 19 Python
利用Python计算KS的实例详解
Mar 03 Python
Python djanjo之csrf防跨站攻击实验过程
May 14 Python
Python破解极验滑动验证码详细步骤
May 21 Python
Pandas的read_csv函数参数分析详解
Jul 02 #Python
如何使用Python实现斐波那契数列
Jul 02 #Python
pandas数据筛选和csv操作的实现方法
Jul 02 #Python
Python列表与元组的异同详解
Jul 02 #Python
Pandas中resample方法详解
Jul 02 #Python
Python何时应该使用Lambda函数
Jul 02 #Python
Python Pandas分组聚合的实现方法
Jul 02 #Python
You might like
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
西德产收音机
2021/03/01 无线电
文件上传的实现
2006/10/09 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
PHP多维数组排序array详解
2017/11/21 PHP
javascript中获取选中对象的类型
2007/04/02 Javascript
Javascript中的数学函数集合
2007/05/08 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
AngularGauge 属性解析详解
2016/09/06 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
vue源码入口文件分析(推荐)
2018/01/30 Javascript
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
js实现简单选项卡功能
2020/03/23 Javascript
js实现动态时钟
2020/03/12 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
vant中的toast层级改变操作
2020/11/04 Javascript
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
python 基础学习第二弹 类属性和实例属性
2012/08/27 Python
Python中下划线的使用方法
2015/03/27 Python
Python3.2模拟实现webqq登录
2016/02/15 Python
python看某个模块的版本方法
2018/10/16 Python
Python递归实现打印多重列表代码
2020/02/27 Python
高中物理教学反思
2014/02/08 职场文书
2014三八妇女节活动总结范文四篇
2014/03/09 职场文书
2014年三万活动总结
2014/04/26 职场文书
公司行政专员岗位职责
2014/08/24 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
酒店前台岗位职责
2015/04/16 职场文书
小学安全工作总结2015
2015/05/18 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
听课评课活动心得体会
2016/01/15 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书