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 19 Python
Python实现按中文排序的方法示例
Apr 25 Python
Python实现App自动签到领取积分功能
Sep 29 Python
python利用ffmpeg进行录制屏幕的方法
Jan 10 Python
python lambda表达式在sort函数中的使用详解
Aug 28 Python
python rsa实现数据加密和解密、签名加密和验签功能
Sep 18 Python
Python学习笔记之函数的参数和返回值的使用
Nov 20 Python
使用tensorboard可视化loss和acc的实例
Jan 21 Python
Django实现celery定时任务过程解析
Apr 21 Python
Keras自定义实现带masking的meanpooling层方式
Jun 16 Python
python爬虫爬取图片的简单代码
Jan 18 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
Jun 09 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
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
php计算整个目录大小的方法
2015/06/19 PHP
PHP自带方法验证邮箱是否存在
2016/02/01 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
事件绑定之小测试  onclick &amp;&amp; addEventListener
2011/07/31 Javascript
JQuery操作Select的Options的Bug(IE8兼容性视图模式)
2013/04/21 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
继续学习javascript闭包
2015/12/03 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
JS 循环li添加点击事件 (闭包的应用)
2016/12/10 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
基于javaScript的this指向总结
2017/07/22 Javascript
JS使用tofixed与round处理数据四舍五入的区别
2017/10/25 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
Python的SimpleHTTPServer模块用处及使用方法简介
2018/01/22 Python
tensorflow实现图像的裁剪和填充方法
2018/07/27 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
2020/06/10 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
班训口号大全
2014/06/18 职场文书
爱护公共设施的标语
2014/06/24 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
出差报告范文
2014/11/06 职场文书
自主招生英文自荐信
2015/03/25 职场文书
自主招生专家推荐信
2015/03/26 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
签订劳动合同通知书
2015/04/16 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书