python爬虫之urllib.parse详解

article/2025/9/30 13:30:16

Python 中的 urllib.parse 模块提供了很多解析和组建 URL 的函数。

urlunparse() 通过长度为6的可迭代对象,组建URL
urlunsplit() 通过长度为5的可迭代对象,组建URL
urljoin() 将两个链接参数拼接为完整URL
urlencode() 将字典转换为请求参数
parse_qs() 将请求参数转换为字典
parse_qsl() 将请求参数转换为元组组成的列表
quote() url中文编码
unquote() url中文解码

解析url( urlparse() )

urlparse() 函数可以将 URL 解析成 ParseResult 对象,实现url的识别和分段。
标准链接格式为:scheme://netloc/path;params?query#fragment

对象中包含了六个元素,分别为:

协议(scheme)
域名(netloc)
路径(path)
路径参数(params)
查询参数(query)
片段(fragment)

from urllib.parse import urlparseurl='https://blog.csdn.net/weixin_43848614/article/details/104607669'parsed_result=urlparse(url)print('parsed_result 的数据类型:', type(parsed_result))
print('parsed_result 包含了: ',len(parsed_result),'个元素')
print(parsed_result)print('scheme  :', parsed_result.scheme)
print('netloc  :', parsed_result.netloc)
print('path    :', parsed_result.path)
print('params  :', parsed_result.params)
print('query   :', parsed_result.query)
print('fragment:', parsed_result.fragment)
print('hostname:', parsed_result.hostname)   

结果为:

parsed_result 的数据类型: <class 'urllib.parse.ParseResult'>
parsed_result 包含了:  6 个元素
ParseResult(scheme='https', netloc='blog.csdn.net', path='/weixin_43848614/article/details/104607669', params='', query='', fragment='')
scheme  : https
netloc  : blog.csdn.net
path    : /weixin_43848614/article/details/104607669
params  : 
query   : 
fragment: 
hostname: blog.csdn.net

urllib.parse.ParseResult 对象的元素,可以通过索引获取

# urllib.parse.ParseResult 对象的元素,可以通过索引获取
from urllib.parse import urlparseurl='https://i.csdn.net/#/uc/profile'parsed_result=urlparse(url)print(parsed_result[0])for i in range(0,6):print('第',(i + 1),'个元素:',parsed_result[i])

结果为:

https
第 1 个元素: https
第 2 个元素: i.csdn.net
第 3 个元素: /4 个元素: 
第 5 个元素: 
第 6 个元素: /uc/profile

参数
参数 作用
urlstring 必填,待解析的url
scheme 默认的协议,如http,https。链接没有协议信息时生效
allow_fragments 是否忽略fragment,如果设置False,fragment部分会被忽略,解析为path、params或者query的一部分,而fragment部分为空。当URL不包含params和query时候,fragment会被解析为path一部分

解析url( urlsplit() )

urlsplit() 函数也能对 URL 进行拆分,所不同的是, urlsplit() 并不会把 路径参数(params) 从 路径(path) 中分离出来,只返回五个参数值,params会合并到path中。
当 URL 中路径部分包含多个参数时,使用 urlparse() 解析是有问题的
这时可以使用 urlsplit() 来解析:

组建URL

组建URL urlunparse()

urlunparse()接收一个是一个长度为6的可迭代对象,将URL的多个部分组合为一个URL。若可迭代对象长度不等于6,则抛出异常。

from urllib.parse import urlunparse
url_compos = ['http','www.baidu.com','index.html','user= haoweixl','a=6','comment']
print(urlunparse(url_compos))

结果为:

http://www.baidu.com/index.html;user= haoweixl?a=6#comment
若可迭代对象长度不等于6,则抛出异常。
# 若可迭代对象长度不等于6,则抛出异常。from urllib.parse import urlunparse
url_compos = ['http','www.baidu.com','index.html','user= haoweixl','a=6','comment','China']
print(urlunparse(url_compos))

在这里插入图片描述

urlunsplit()

与 urlunparse()类似,传入对象必须是可迭代对象,且长度必须是5

from urllib.parse import urlunsplit
url_compos = ['http','www.baidu.com','index.html','user= haoweixl','a = 2']
print(urlunsplit(url_compos))urlunsplit()

结果为:

http://www.baidu.com/index.html?user= haoweixl#a = 2

urljoin()组接url,

:连接两个参数的url, 将第二个参数中缺的部分用第一个参数的补齐,如果第二个有完整的路径,则以第二个为主。

# 连接两个参数的url, 将第二个参数中缺的部分用第一个参数的补齐,如果第二个有完整的路径,则以第二个为主
from urllib.parse import urljoinprint(urljoin('www.baidu.com', '?category=2#comment'))
print(urljoin('www.baidu.com', 'https://blog.csdn.net/nav/python'))

结果为:

www.baidu.com?category=2#comment
https://blog.csdn.net/nav/python

查询参数的构造与解析

使用 urlencode() 函数可以将一个 dict 转换成合法的查询参数:

dict1 = {'key1': 'one', 'key2': 3, 'key3': '中国', 'key4': '加油' }   # 字典类型
import urllib.parse
print( urllib.parse.urlencode(dict1) )

结果为:

key1=one&key2=3&key3=%E4%B8%AD%E5%9B%BD&key4=%E5%8A%A0%E6%B2%B9

使用 parse_qs() 来将查询参数解析成 dict。

dict1 = {'key1': 'one', 'key2': 3, 'key3': '中国', 'key4': '加油' }   # 字典类型
import urllib.parse
query_str = urllib.parse.urlencode(dict1) 
print("将字典转换为字符串: ", query_str)
query_dic = urllib.parse.parse_qs(query_str)
print("将字符串还原为字典: ", query_dic)

结果为:

将字典转换为字符串:  key1=one&key2=3&key3=%E4%B8%AD%E5%9B%BD&key4=%E5%8A%A0%E6%B2%B9
将字符串还原为字典:  {'key1': ['one'], 'key2': ['3'], 'key3': ['中国'], 'key4': ['加油']}

parse_qsl() 将请求参数转换为元组组成的列表

# parse_qsl() 将请求参数转换为元组组成的列表
dict1 = {'key1': 'one', 'key2': 3, 'key3': '中国', 'key4': '加油' }   # 字典类型
import urllib.parse
query_str = urllib.parse.urlencode(dict1) 
print("将字典转换为字符串: ", query_str)
query_list = urllib.parse.parse_qsl(query_str)
print("将字符串还原为元组组成的列表: ", query_list)

结果为:

将字典转换为字符串:  key1=one&key2=3&key3=%E4%B8%AD%E5%9B%BD&key4=%E5%8A%A0%E6%B2%B9
将字符串还原为元组组成的列表:  [('key1', 'one'), ('key2', '3'), ('key3', '中国'), ('key4', '加油')]

quote() url中文编码

url中出现中文可能会乱码,所以中文路径需要转化,就用到了quote方法。

from urllib.parse import quote
keyword = "雪景"
url = 'https://www.baidu.com/s?wd=' + quote(keyword)
print(url)

结果为:

https://www.baidu.com/s?wd=%E9%9B%AA%E6%99%AF

unquote() url中文解码

有了quote方法转换,也需要有unquote方法对URL进行解码

from urllib.parse import unquote
url = 'https://www.baidu.com/s?wd=%E9%9B%AA%E6%99%AF'
fragment = '%E9%9B%AA%E6%99%AF'
print(unquote(url))
print(unquote(fragment))

结果为;

https://www.baidu.com/s?wd=雪景
雪景

参考博客链接:https://www.cnblogs.com/-wenli/p/10894562.html


http://chatgpt.dhexx.cn/article/fWTymhHN.shtml

相关文章

Python中Urlparse模块

Urlparse这个第三方模块中包含的函数有urljoin、urlsplit、urlunsplit、urlparse等。 1.urlparse.urlparse(urlstring[, scheme[, allow_fragments]]) urlparse将urlstring解析成6个部分&#xff0c;它从urlstring中取得URL&#xff0c;并返回元组 (scheme, netloc, path, pa…

[240]python的urllib.parse库解析URL

Python 中的 urllib.parse 模块提供了很多解析和组建 URL 的函数。 解析url urlparse() 函数可以将 URL 解析成 ParseResult 对象。对象中包含了六个元素&#xff0c;分别为&#xff1a; 协议&#xff08;scheme&#xff09; 域名&#xff08;netloc&#xff09; 路径&#x…

Python之urllib爬虫-request模块和parse模块详解

文章目录 urllibrequest模块访问URLRequest类其他类 parse模块解析URL转义URL robots.txt文件 urllib urllib是Python中用来处理URL的工具包&#xff0c;源码位于/Lib/下。它包含了几个模块&#xff1a;用于打开及读写的urls的request模块、由request模块引起异常的error模块、…

url.parse() 的替换方法new URL(),URl.parse()的使用。

URl.parse()的解析使用 对于这种表单提交的的请求路径&#xff0c;由于其中具有用户动态填写的内容所以不能通过完整的URL路径来处理这个请求对于我们来讲&#xff0c;只需要判定&#xff0c;请求路径是/……&#xff1f;之前就行 var myurl require(url); var obj myurl.p…

Python之urlparse模块

一、简介 urlparse库用于把url解析为各个组件&#xff0c;支持file,ftp,http,https, imap, mailto, mms, news, nntp, prospero, rsync, rtsp, rtspu, sftp, shttp, sip, sips, snews, svn, svnssh, telnet等几乎所有的形式。根据其官网的说明&#xff0c;在Python3.0中&#x…

Python模块:urlparse模块(操作url)

文章目录 一、介绍二、功能介绍1.urlparse.urlparse2.urlparse.urlsplit3.urlparse.urljoin 一、介绍 官方文档 &#xff1a;http://docs.python.org/library/urlparse.html作用&#xff1a;urlparse模块主要是用于解析url中的参数 对url按照一定格式进行 拆分或拼接注意&…

基于FPGA的人脸识别

基于FPGA的人脸识别 一.理论基础 1.基本介绍 模块框图&#xff1a; 在上一篇文章里&#xff0c;已经实现了基于OV5640的摄像头监控&#xff0c;在此基础上&#xff0c;我们加入一些图像处理的内容&#xff0c;即可实现简单的一些图像处理效果&#xff0c;这次做到的就是最…

facenet 人脸识别原理理解(三)

在前两篇文章已经介绍了facenet人脸识别代码的使用和具体操作&#xff0c;但相关的原理还是没有说&#xff0c;这篇文章进行简单的讲解一下。 1. 原理 在人脸识别中&#xff0c;当我们需要加在图片数据库入新的一张人脸图片时&#xff0c;是怎么做到识别的呢&#xff0c;难道…

人脸识别mtcnn原理

人脸检测&#xff0c;也就是在图片中找到人脸的位置。输入是一张可能含有人脸的图片&#xff0c;输出是人脸位置的矩形框。 人脸对齐。原始图片中人脸的姿态、位置可能有较大的区别&#xff0c;为了之后统一处理&#xff0c;要把人脸“摆正”。为此&#xff0c;需要检测人脸中…

dlib中的人脸识别原理

这里讨论的是人脸识别&#xff0c;不是人脸检测 dlib中是先检测都人脸&#xff0c;然后把人脸通过Resnet生成一个128维的向量&#xff0c;Resnet有几种不同深度的结构(图片来自https://raw.githubusercontent.com/raghakot/keras-resnet/master/images/architecture.png) dlib…

计算机识别人脸原理,深入浅出人脸识别原理

编辑推荐: 本文主要介绍了人脸识别流程,如何提取面部训练数据进行识别以及人脸检测和人脸识别,它们应用场景有哪些,希望对您的学习又所帮助。 本文来自于csdn,由火龙果软件Alice编辑、推荐。 前不久Iphone X发布,革命性的取消了TouchID(指纹识别),而添加了更酷的 FaceID(…

基于html5鼠标悬停图片动画展示效果

分享一款基于html5鼠标悬停图片动画展示效果。里面包含两款不同效果的html5图片展示效果。效果图如下&#xff1a; 在线预览 源码下载 实现的代码。 html代码&#xff1a; <div class"wrap" id"wrap"><div style"float: left; padding-top…

组件分享之后端组件——一个简单且高度可扩展的分布式文件系统seaweedfs

组件分享之后端组件——一个简单且高度可扩展的分布式文件系统seaweedfs 背景 近期正在探索前端、后端、系统端各类常用组件与工具&#xff0c;对其一些常见的组件进行再次整理一下&#xff0c;形成标准化组件专题&#xff0c;后续该专题将包含各类语言中的一些常用组件。欢迎大…

代理神器Charles4.2.8的破解

打开Charles&#xff0c;点击工具栏的Help&#xff0c;选择Register Charles&#xff0c;在两栏里分别输入即可。 Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4

TLS加密套件

出于兴趣爱好&#xff0c;决定开发TLS1.2-1.3的一个库。为此阅读了TLS相关的若干RFC文档&#xff0c;以及查阅了多篇相关博客文章。最终有以下发现&#xff1a; 1. TLS定义了几百个加密套件(参考https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml)&#x…

sshd服务及防暴力破解 附赠防暴力破解脚本

利用yum源安装sshd服务客户端安装&#xff1a;openssh-clients.x86_64 服务端安装&#xff1a;openssh-server.x86_64Openssh和sshd有区别吗&#xff1f; 两个是不同的概念&#xff0c;软件包名称叫openshh 开机的服务叫sshd[rootserver1 ~]# rpm -ql openssh ###查看安装的…

The server selected protocol version TLS10 is not accepted by client preferences [TLS12]

最近在部署项目的时候遇到一个问题&#xff0c;卡了整整一天时间&#xff0c;所以感觉有必要po个解决方法出来给有需要的朋友参考一下。 问题描述&#xff1a;Caused by: javax.net.ssl.SSLHandshakeException: The server selected protocol version TLS10 is not accepted b…

TLS 1.3 协议详解

TLS 1.3 握手流程详解 我的TLS实现&#xff08;支持TLS1.3和国密SSL&#xff09;&#xff0c;大家可以学习参考&#xff1a;https://github.com/mrpre/atls/ 如果觉得有用&#xff0c;请打赏N元&#xff1a;http://39.98.242.44 需要的背景知识&#xff1a; &#xff08;1&am…

服务攻防-协议漏洞-FTPRDPSSHRsyncProFTPDlibsshOpenssh-Hydra工具使用口令猜解未授权访问

目录 一、导图 二、口令猜解-Hydra-FTP&RDP&SSH 1、协议介绍 2、Hydra工具介绍 3、实例演示 三、配置不当-未授权访问-Rsync 文件备份 1、Rsync介绍 2、漏洞成因——配置不当 3、实例演示 四、协议漏洞-应用软件-FTP&ProFTPD搭建 1、引入 2、ProFTPD介…

提示:The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12]

JMeter连接SQLservice数据库。 1、测试计划添加sqljdbc41.jar 2、添加数据库配置 3、添加请求 3、按着上面的配置&#xff0c;执行&#xff0c;然后报错误了。 提示“Cannot create PoolableConnectionFactory (The driver could not establish a secure connection to SQL S…