介绍

urllib.parse是为urllib包下面的一个模块,urllib的其它模块完全可以使用requests替代。但是urlli.parse我们是有必要了解的,因为该模块下面有很多操作url路径的方法

urlparse:拆分url

from urllib import parse
url = "https://www.baidu.com/s?wd=python"
print(parse.urlparse(url)) # ParseResult(scheme='https', netloc='www.baidu.com', path='/s', params='', query='wd=python', fragment='')
"""
scheme:协议,比如http,https等等。
netloc:域名,这里是www.baidu.com
path:路径,跟在域名后面
params:参数
query:查询条件
fragment:锚点,用于直接定位页面的下拉位置,跳转到网页的指定位置
"""
scheme, netloc, path, params, query, fragment = parse.urlparse(url)
print(f"协议:{scheme}")
print(f"域名:{netloc}")
print(f"路径:{path}")
print(f"参数:{params}")
print(f"查询参数:{query}")
print(f"锚点:{fragment}")
"""
协议:https
域名:www.baidu.com
路径:/s
参数:
查询参数:wd=python
锚点:
""" # 关于urlparse里面还可以传入一个scheme
# 这个参数只有在传入的url没有scheme的时候,才会起作用
url = "www.baidu.com/s?wd=python"
print(parse.urlparse(url)) # ParseResult(scheme='', netloc='', path='www.baidu.com/s', params='', query='wd=python', fragment='')
print(parse.urlparse(url), scheme="哈哈哈") # ParseResult(scheme='哈哈哈', netloc='', path='www.baidu.com/s', params='', query='wd=python', fragment='')

urlunparse:生成url

# urlparse是将url拆分
# urlunparse是将url组合,参数则是一个元祖,里面是urlparse拆分之后的各个部分
url_params = ("https", "www.abc.com", "/info/ad2sads", "", "name=saya&age=16", "splendid")
print(parse.urlunparse(url_params)) # https://www.abc.com/info/ad2sads?name=saya&age=16#splendid

urljoin:组合url

# 有时候我们获取的url是不包含域名的
# 比如爬虫获取图片,本来的路径是http://www.xxx.com/picture/aaa.jpg
# 但是返回的是/pic/aaa.jpg,于是我们就需要进行组合
netloc = "http://www.xxx.com"
path = "/picture/aaa.jpg" # 开头的/无论有没有,都能组合成功
print(parse.urljoin(netloc, path)) # http://www.xxx.com/picture/aaa.jpg # 如果本来就是完整路径呢?
netloc = "http://www.xxx.com"
path = "http://www.xxx.com/picture/aaa.jpg"
print(parse.urljoin(netloc, path)) # http://www.xxx.com/picture/aaa.jpg
# 如果不是完整路径,会进行拼接,如果是完整路径,那么就结果就是原来本身的完整路径 netloc = "http://www.kkk.com"
path = "http://www.xxx.com/picture/aaa.jpg"
print(parse.urljoin(netloc, path)) # http://www.xxx.com/picture/aaa.jpg
# 两者域名不一样的话,有限以path自身的路径为准
# 只有path中不存在域名的时候,才会使用netloc
netloc = "http://www.kkk.com"
path = "/picture/aaa.jpg"
print(parse.urljoin(netloc, path)) # http://www.kkk.com/picture/aaa.jpg

urlencode:参数转换

# 我们在requests中调用get方法传参的时候,直接指定一个字典即可
# 说明requests会自动帮我们转化,那么我们也可以调用urlencode手动转化
netloc = "http://www.query.com"
path = "/search"
params = {"name": "mashiro", "age": 16}
print(parse.urlencode(params)) # ame=mashiro&age=16
print(parse.urljoin(netloc, path) + "?" + parse.urlencode(params)) # http://www.query.com/search?name=mashiro&age=16

quote:中文转换url编码

# 当我们在url中传入中文的时候,会以编码的形式
url = "https://www.baidu.com/s?wd=古明地觉"
print(parse.quote(url)) # https%3A//www.baidu.com/s%3Fwd%3D%E5%8F%A4%E6%98%8E%E5%9C%B0%E8%A7%89

unquote:url编码解码成中文

print(parse.unquote("https%3A//www.baidu.com/s%3Fwd%3D%E5%8F%A4%E6%98%8E%E5%9C%B0%E8%A7%89"))  # https://www.baidu.com/s?wd=古明地觉

urllib.parse:很底层,但是是一个处理url路径的好模块的更多相关文章

  1. urllib.parse.urlencode

    urllib.request.urlopen(url,data,timeout) 其中如果data被赋值,则请求的方式就会由get转为post,而post需要提供一些待处理的数据. 这些待处理的数据需 ...

  2. python3中的urllib.parse的常用方法

    将URL按一定的格式进行拆分 使用 urllib.parse.urlparse将url分为6个部分,返回一个包含6个字符串项目的元组:协议.位置.路径.参数.查询.片段 参照官方地址:https:// ...

  3. urllib.parse.parse_qsl 的一个小问题

    最近在使用urllib时发现的一个问题,记录一下. 首先请分别执行下面这两句代码: 1."你好".encode("utf8").decode("gbk ...

  4. 我与python3擦肩而过(三)—— 我去。。又是编码问题——urllib.parse.unquote

    记得初学python时就学的爬虫,经常遇到编码问题(其实在python3里面编码问题已经很少了...),用requests库就挺方便解决这些问题的.近来有共同学习python的程序员写了个电子书网站, ...

  5. urllib.parse

    1 url分解 import urllib.parse result = urllib.parse.urlparse('http://www.baidu.com') print(result) 结果为 ...

  6. Python 的 urllib.parse 库解析 URL

      Python 中的 urllib.parse 模块提供了很多解析和组建 URL 的函数. 解析url urlparse() 函数可以将 URL 解析成 ParseResult 对象.对象中包含了六 ...

  7. URL组成成分及各部分作用简介及urllib.parse / uri

    URL的一般格式为(带方括号[]的为可选项): protocol :// hostname[:port] / path / [;parameters][?query]#fragment urllib. ...

  8. (转)Python3 模块3之 Urllib之 urllib.parse、urllib.robotparser

    原文:https://blog.csdn.net/qq_36148847/article/details/79153738 https://blog.csdn.net/zly412934578/art ...

  9. urllib.parse.urldefrag(url)的解释

    引自https://www.cnblogs.com/ublue/articles/4471210.html 1.URL hash(片段标识符) 任一带#的URL称为片段URL(通常称为URL hash ...

随机推荐

  1. iOS实现页面既显示WebView,WebView下显示TableView,动态计算WebView内容高度

    实现效果如下: 忽略底部的评论视图,太丑了,待完善...... 实现思路: 1>页面布局采用TableView实现,顶部"关注"模块的View是TableView的table ...

  2. 如何运行Vue源码

    1.下载源码 从git中找到vue源码,把repo链接复制,使用[ git clone 链接 ]命令将vue源码下载到本地. 2.可以看到以下目录 每次看vue项目时,我们首先要看下package.j ...

  3. CentOS7.5下,MySQL安装配置指南

    [root@host---- home]# grep 'temporary password' /var/log/mysqld.log --20T02::.457613Z [Note] A tempo ...

  4. 爬虫学习笔记之为什么要设置超时时间,怎么设置(使用selenium)

    一个程序没有设置超时时间,就可以说是一段有缺陷的代码. 读取超时指的就是客户端等待服务器发送请求的时间.(特定地,它指的是客户端要等待服务器发送字节之间的时间.在 99.9% 的情况下这指的是服务器发 ...

  5. JavaScript校验身份证,包含省份、长度、出生年月日、校验位的检测、性别、年龄

    一.代码如下 let vcity = {11: '北京', 12: '天津', 13: '河北', 14: '山西', 15: '内蒙古', 21: '辽宁', 22: '吉林', 23: '黑龙江 ...

  6. IDEA 2019.2破解激活教程(激活到2089年8月,亲测有效,持续更新中...)

    本来笔者这边是有个正版激活码可以使用的,但是,2019.9月3号的时候,一些小伙伴反映这个注册码已经失效了,于是拿着自己的 IDEA, 赶快测试了一下,果不其然,已然是不能用了. 好在,笔者又找到了新 ...

  7. Maven跳过单元测试的两种方式

    -DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下. -Dmaven.test.skip=true,不执行测试用例,也不编译测试 ...

  8. golang break label 与goto label

    本文链接:https://blog.csdn.net/itbsl/article/details/73380537 与其他语言一样,Go语言也支持label(标签)语法:分别是break label和 ...

  9. js 返回一个数组里面0出现的次数

    var num = new Array(10000).fill('').map((item,index) => (index + 1)). 在点号后面补充代码,让num是这个数组中0出现的次数, ...

  10. PYTHON 100days学习笔记002:语言元素-数字变量与运算符

    参考文章: Python 变量类型 Python 运算符 Day02 - 语言元素 1. 指令和程序 计算机的硬件系统通常由五大部件构成,包括:运算器.控制器.存储器.输入设备和输出设备.其中,运算器 ...