本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

  大家好我是费老师,在诸如网络爬虫、web应用开发等场景中,我们需要利用Python完成大量的url解析、生成等操作。

  而在Python生态中,无论是使用诸如urllib之类的标准库,还是各种第三方库,可以用来有效处理url的方法都非常之丰富。而今天费老师我要给大家介绍的url处理库,则是我在实际使用中综合考虑简单易用性与运算速度后,最为满意的。

2 在Python中利用yarl高效处理url

  这个可以用来高效便捷处理url的第三方库叫做yarl,使用pip install yarl完成安装后,下面我们来快速学习其主要的一些功能方法:

2.1 利用yarl解析url信息

  基于yarl中的URL(),我们可以从任意合法的url中解析出下图所示的各个构成部分:

  先来看一个简单的例子,其中对我保管每一篇博客文章附件的github仓库路径url进行解析:

from yarl import URL

url = URL('https://github.com/CNFeffery/DataScienceStudyNotes/tree/master/%E5%8E%86%E5%8F%B2%E6%96%87%E7%AB%A0%E9%99%84%E4%BB%B6%E5%88%97%E8%A1%A8')

  原始的网址由于包含了中文等非ASCII字符,所以粘贴到代码中后变成了url编码后的样子,直接调用human_repr()方法即可进行解码还原:

  而通过获取对应url各部分名称的属性,即可分别提取出相应信息:

  其中端口信息是基于scheme信息按照常规情况进行推断的,http即为80https即为443,若需要获取url中显式出现的端口信息,可以使用explicit_port

  针对url中的hash标签信息则可以通过fragment取得:

  若要解析的url中包含query参数信息,则可以直接调用query得到MultiDict类型的返回结果,这是种特殊的字典类型,它允许存在重复的键,对于不存在重复的键值对,可以像普通字典那样索引值,否则则需要通过getall()方法来返回所传入键对应的所有值列表:

  可以感受到通过yarl解析url非常的方便~

2.2 利用yarl构造url

  当我们需要基于已有的各部分信息构造url时,yarl就更加方便了,基础的方式是基于URL.build()方法,以函数传参的方式定义url

  而如果你已经有了具体存在的yarl.URL对象,想在此基础上进行其他部分内容的设置,则可以使用一系列名称格式为with_xxx()的方法,其中xxx就对应着各个部分的名称:

  特别地,针对查询参数部分,还专门有update_query()方法进行参数追加,它与with_query()的区别可以从下面的例子中体会到:

2.3 利用/%运算符快捷合成url

  在yarl中,针对/%运算符进行了重写,以支持类似下面例子的快捷操作,非常的方便:

  除了上面介绍的yarl常用功能以外,还有譬如利用is_absolute()方法判断url是否为绝对路径等其他实用功能,感兴趣的读者朋友们可以前往官方文档了解更多(https://yarl.aio-libs.org/en/latest/index.html)。


  以上就是本文的全部内容,欢迎在评论区与我进行讨论~

(数据科学学习手札145)在Python中利用yarl轻松操作url的更多相关文章

  1. (数据科学学习手札32)Python中re模块的详细介绍

    一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供 ...

  2. (数据科学学习手札126)Python中JSON结构数据的高效增删改操作

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一期文章中我们一起学习了在Python ...

  3. (数据科学学习手札136)Python中基于joblib实现极简并行计算加速

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在日常使用Python进行各种数据计算 ...

  4. (数据科学学习手札53)Python中tqdm模块的用法

    一.简介 tqdm是Python中专门用于进度条美化的模块,通过在非while的循环体内嵌入tqdm,可以得到一个能更好展现程序运行过程的提示进度条,本文就将针对tqdm的基本用法进行介绍. 二.基本 ...

  5. (数据科学学习手札54)Python中retry的简单用法

    一.简介 retry是一个用于错误处理的模块,功能类似try-except,但更加快捷方便,本文就将简单地介绍一下retry的基本用法. 二.基本用法 retry: 作为装饰器进行使用,不传入参数时功 ...

  6. (数据科学学习手札90)Python+Kepler.gl轻松制作时间轮播图

    本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 Kepler.gl作为一款强大的开源地理信 ...

  7. (数据科学学习手札49)Scala中的模式匹配

    一.简介 Scala中的模式匹配类似Java中的switch语句,且更加稳健,本文就将针对Scala中模式匹配的一些基本实例进行介绍: 二.Scala中的模式匹配 2.1 基本格式 Scala中模式匹 ...

  8. (数据科学学习手札109)Python+Dash快速web应用开发——静态部件篇(中)

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...

  9. (数据科学学习手札25)sklearn中的特征选择相关功能

    一.简介 在现实的机器学习任务中,自变量往往数量众多,且类型可能由连续型(continuou)和离散型(discrete)混杂组成,因此出于节约计算成本.精简模型.增强模型的泛化性能等角度考虑,我们常 ...

随机推荐

  1. Java 注解及其底层原理

    目录 什么是注解? 注解的分类 Java自带的标准注解 元注解 @Retention @Documented @Target @Inherited @Repeatable 自定义注解 自定义注解的读取 ...

  2. BZOJ4337 树的同构 (树哈希)(未完成)

    样例迷,没过 交了30pts #include <cstdio> #include <iostream> #include <cstring> #include & ...

  3. java学习第一天.day05

    jvm的内存 栈:类方法使用后自动销毁,销毁的好处是释放内存 java方法执行时,在栈区执行 堆: 线程共享的一块内存区域      所有的对象实例以及 数组 都要在堆上分配      每次使用new ...

  4. 如何定义 Java 的回调函数,与 JavaScript 回调函数的区别

    JavaScript 中的回调函数 在 JavaScript 中经常使用回调函数,比如:get 请求.post 请求等异步任务.在我们请求之前以及请求之后,都需要完成一些固定的操作,比如:请求之前先从 ...

  5. TCP实现多个客户端发送数据给服务器端

    SocketThread给服务端用的线程类: public class SocketThread extends Thread{ private Socket socket; public Socke ...

  6. centos7.6内核之cfs_bandwidth下的distribute_cfs_runtime hard lockup

    接到业务兄弟报障,出现多例crash,堆栈大多数如下: KERNEL: /usr/lib/debug/lib/modules/3.10.0-957.27.2.el7.x86_64/vmlinuxDUM ...

  7. 使用Python的selenium库制作脚本,支持后台运行

    本文介绍如何使用Python的selenium库制作脚本.概念:       Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome.Firefox.Safari等主流界面 ...

  8. 检查一个数值是否为有限的Number.isFinite()

    如果参数类型不是数值,Number.isFinite()一律返回false. Number.isFinite(15); // true Number.isFinite(0.8); // true Nu ...

  9. day25--Java集合08

    Java集合08 15.HashTable 15.1HashTable的基本介绍 存放的元素是键值对:即K-V HashTable的键和值都不能为null HashTable的使用方法基本上和Hash ...

  10. 简单html js css 轮播图片,不用jquery

    这个是自己修改的轮播图片,在网上有的是flash 实现的轮播图片,对搜索引擎不友好, 比如:dedecms 的首页的轮播图是用flash实现滚动的. 所以这个自己修改了一下,实现html+js+css ...