Python3 模块3之 Urllib之 urllib.parse、urllib.robotparser

本文详细介绍了Python3的urllib.parse模块,包括URL Parsing的urlparse、urlunparse、parse_qs、parse_qsl、urlsplit、urlunsplit、urljoin、urldefrag,以及URL Quoting的quote、quote_plus、unquote、unquote_plus和urlencode。同时讲解了urllib.robotparser模块,用于解析网站的robots.txt文件,遵循网站爬取规则。
摘要由CSDN通过智能技术生成

紧接上一篇:Python3 模块2之 Urllib之 urllib.error

urllib.parse

urllib.parse 模块定义了一个标准接口,在组件(addressing scheme、网址以及路径等)中打破了统一资源定位器(URL)字符串,并将相对 URL(relative URL)转换为给定的 基 URL(base URL) 的绝对 URL(absolute URL)。
urllib.parse 被设计成在相对统一资源定位器(Relative Uniform Resource Locators)上与互联网 RFC 相匹配。它支持如下的 URL schemes (URL 协议): file、 ftp、gopher、hdl、http、 https、imap、 mailto、 mms、news、nntp、 prospero、rsync、rtsp、 rtspu、 sftp、 shttp、 sip、 sips、 snews、svn、svn+ssh、 telnet、 wais、 ws、wss。

urllib.parse 分为 URL parsing (网址解析)URL quoting(地址引用)

一. 网址解析(URL Parsing)

URL 解析函数专注于将 URL 字符串拆分为其组件,或将 URL 组件组合到 URL 字符串中。

下面简要分析使用对应解析函数
1.urlparse

定义:urllib.parse.urlparse(urlstring, scheme=”, allow_fragments=True)

作用特点:将 URL 拆分成 6 大组件

通常一个基本点 URL 应该为:scheme://netloc/path;parameters?query#fragment ,每个元素组都为 String 字符串类型,或者为空。例如,http://www.cwi.nl:80/%7Eguido/Python.html

除这六大组件外,该类具有以下附加的只读便利属性(可看下表):

属性 索引 值为 None
scheme 0 URL 协议 scheme 参数
netloc 1 网络端口 空字符串
path 2 分层路径 空字符串
params 3 最后一个路径元素参数 空字符串
query 4 Query 组件 空字符串
fragment 5 片段标志符 空字符串
username 用户名 None
password Password None
hostname 主机名 (小写) None
port 如果存在,端口值为整数 None

下面是一个实例

#! /usr/bin/evn python3

#"测试urlparse"
#导入parse模块
from urllib import parse

urp = parse.urlparse('https://docs.python.org/3/search.html?q=parse&check_keywords=yes&area=default')
print(urp)
#result:ParseResult(scheme='http', netloc='www.baidu.com:80', path='/doc', params='', query='age=5', fragment='ff')
print(urp.scheme)
#result:http
print(urp.netloc)
#result:www.baidu.com:80

输出

ParseResult(scheme='https', netloc='docs.python.org', path='/3/search.html', params='', query='q=parse&check_keywords=yes&area=default', fragment='')
https
docs.python.org

urllib.parse.parse_qsl(qs, keep_blank_values=False, strict_parsing=False, encoding=’utf-8’, errors=’replace’)

2.urlunparse

定义:urllib.parse.urlunparse(parts)

urlparse() 返回的元组元素构造一个URL 。该部分参数可以是任何六个组件的迭代。如果最初解析的 URL 有不必要的分隔符(例如 ?;带有空查询; RFC 声明它们是等同的),则这可能会导致稍微不同但等效的URL 。

下面是一个实例

#! /usr/bin/evn python
#测试urlunparse
#导入parse模块
from urllib import parse
parsed=parse.urlparse('http://user:pass@NetLoc:80/path;parameters?query=argument#fragment')
print(parsed)
url=parse.urlunparse(parsed)
print(url)

输出

ParseResult(scheme='http', netloc='user:pass@NetLoc:80', path='/path', params='parameters', query='query=argument', fragment='fragment')
http://user:pass@NetLoc:80/path;parameters?query=argument#fragment

三.parse_qs

定义:urllib.parse.parse_qs(qs, keep_blank_values=False, strict_parsing=False, encoding=’utf-8’, errors=’replace’)

解析一个作为字符串参数给定的查询字符串(类型application/x-www-form-urlencoded 类型的数据)。数据作为字典返回。字典键是唯一的查询变量名且值是每个名称的值列表。

可选参数 keep_blank_values 是指示分空值编码的查询应处理为空字符串标志。一个真值表示空值应保留为空字符串。参数 keep_blank_values 的默认值为 false 表示空值将被忽略,并被视为不包括在内。

可选参数 strict_parsing 是一个标志,表示如何处理解析错误。如果值为 FALSE(默认),错误将被忽略。如果是 `TRUE 1的,误差使 ValueError 异常增加。

四.parse_qsl

定义:urllib.parse.parse_qsl(qs, keep_blank_values=False, strict_parsing=False, encoding=’utf-8’, errors=’replace’)

基本用法与 parse_qs 一致,只是urllib.parse.parse_qs 返回字典,urllib.parse.parse_qsl 返回列表

下面是一个针对 三、四的实例

from urllib import parse
url = r'https://docs.python.org/3.5/search.html?q=parse&check_keywords=yes&area=default'
parseResult = parse.urlparse(url)
#print(parseResult)
# parseResult 数据格式满足 parse.parse_qs、parse.parse_qsl 传入的数据格式要求
param_dict = parse.parse_qs(parseResult.query)
param_list = parse.parse_qsl(parseResult.query)
print("返回字典:",param_dict)
print("返回列表:"
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值