Python-标准库之处理URL-urllib

一、URL解析:urllib.parse

urllib.parse模块主要定义了两个类:1、urllib.parse.urlparse  通过一个URL字符串,将该字符串按组件(协议、网络位置、路径等)分解 ;     2、urllib.parse.quote  对特殊字符进行转义

  1. urlparse: 分解URL,返回各组件

from urllib.parse import *

url = "https://i.cnblogs.com/posts/edit;postId=15137104"

o = urlparse(url)

print(o)
#执行结果: ParseResult(scheme='https', netloc='i.cnblogs.com', path='/posts/edit', params='postId=15137104', query='', fragment='')

print(o.scheme)
#执行结果:https  -->  URL协议
print(o.netloc)
#执行结果:i.cnblogs.com  -->网络位置部分
print(o.params)    #参数 -->postId=15137104
print(o.username)
print(o.password)

通过解析URL得到的属性:

2.urlsplit: 也能分解URL,不同的是,urlsplit并不会把路径参数(params)从路径(path)中分离出来,当路径部分包含多个参数时,
#使用urlparse会出现问题

split_url = "http://user:pwd@domain:80/path1;params1/path2;params2?query=queryarg#fragment"
res = urlsplit(split_url)
print(res)
#执行结果:SplitResult(scheme='http', netloc='user:pwd@domain:80', path='/path1;params1/path2;params2', query='query=queryarg', fragment='fragment')

res1 = urlparse(split_url)
print(res1)
#执行结果:ParseResult(scheme='http', netloc='user:pwd@domain:80', path='/path1;params1/path2', params='params2', query='query=queryarg', fragment='fragment')

 3. urldefrag:  将URL中的碎片(fragment)分离出来

frag_url = "http://user:pwd@domain:80/path1;params1/path2;params2?query=queryarg#fragment" 

res = urldefrag(frag_url)

print(res)
#执行结果:DefragResult(url='http://user:pwd@domain:80/path1;params1/path2;params2?query=queryarg', fragment='fragment')


print(res.url)
#执行结果:http://user:pwd@domain:80/path1;params1/path2;params2?query=queryarg
print(res.fragment)
#执行结果:fragment

4.urlunparse(), urljoin() : 组建生成URL

  • urlunparse()必须六个参数以上,否则报错not enough values
sub_url = ('http','user:pwd@domain:80','path1;params1/path2','params2','query=queryarg','fragment')
res = urlunparse(sub_url)
print(res)
#执行结果:http://user:pwd@domain:80/path1;params1/path2;params2?query=queryarg#fragment
  • urljoin()将两个字符串拼接成url
url1 = "https://home.cnblogs.com/"
url2 = "deeptester-vv"
res = urljoin(url1,url2)
print(res)
#执行结果:https://home.cnblogs.com/deeptester-vv

5. urlencode(): 将一个字典(dict)编码并拼接成一个URL参数

dict = {
    "name": 'vv',
    "age": 18,
    "sex": "Female"
}

res = urlencode(dict)
print(res)
#执行结果: name=vv&age=18&sex=Female

6、parse_qs(): 将编码后的URL参数解析成dict

dict = {
    "name": 'vv',
    "age": 18,
    "sex": "Female"
}

res = urlencode(dict)
print(res)
#执行结果: name=vv&age=18&sex=Female


print(parse_qs(res))
#执行结果: {'name': ['vv'], 'age': ['18'], 'sex': ['Female']}

 7. quote: 对特殊字符进行转义,unquote则相反

res = quote("中国")
print(res)
#执行结果: %E4%B8%AD%E5%9B%BD


res1 = unquote("%E4%B8%AD%E5%9B%BD")
print(res1)
#执行结果: 中国

二、URL请求模块:urllib.request

关于 urllib.request: urllib.request 模块提供了最基本的构造 HTTP (或其他协议如 FTP)请求的方法,利用它可以模拟浏览器的一个请求发起过程。利用不同的协议去获取 URL 信息。它的某些接口能够处理基础认证 ( Basic Authenticaton) 、redirections (HTTP 重定向)、 Cookies (浏览器 Cookies)等情况。而这些接口是由 handlers 和 openers 对象提供的。

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

注意:url为https类型时有时会报错:urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1129)>

解决方案:

import ssl

ssl._create_default_https_context = ssl._create_unverified_context

 

posted @   美女爱找茬  阅读(287)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示