1、网络模块概述与urllib.parse模块解析、恢复url和查询字符串(url参数)
0)网络分层及协议
1)Pyhton的网络模块
- spcket:基于传输层 TCP、UDP 协议进行网络编程的模块
- email:Email 和 MIME 消息处理模块
- smtplib:支持 SMTP 协议(发送邮件)的客户端模块
- poplib:支持 POP3 协议的客户端模块
- urllib及其子模块:支持 URL 处理的模块
2)使用urllib.parse模块解析、恢复url
(1)解析 url:
-
urlparse():将 url字符串解析成各部分,返回值为 ParseResult(tuple 的子类)
import urllib.parse s = 'http://www.fkjava.org:80/index.html;parm?name=user#title' # 解析 url 字符串 r = urllib.parse.urlparse(s) print(r, type(r)) print('-'*40) print('协议:', r.scheme, '|', r[0]) print('位置:', r.netloc, '|', r[1]) print('资源路径:', r.path, '|', r[2]) print('参数:', r.params, '|', r[3]) print('查询字符串:', r.query, '|', r[4]) print('fragement:', r.fragment, '|', r[5])
ParseResult(scheme='http', netloc='www.fkjava.org:80', path='/index.html', params='parm', query='name=user', fragment='title') <class 'urllib.parse.ParseResult'> ---------------------------------------- 协议: http | http 位置: www.fkjava.org:80 | www.fkjava.org:80 资源路径: /index.html | /index.html 参数: parm | parm 查询字符串: name=user | name=user fragement: title | title
(2)恢复 url:
-
urlunparse():将 url 各部分(ParseResult或tuple))恢复成 url 字符串
tu = ('http', 'www.fkjava.org:80', '/index.html', 'parm', 'name=user', 'title') print(urllib.parse.urlunparse(tu)) # 恢复 url 字符串
http://www.fkjava.org:80/index.html;parm?name=user#title
3)使用urllib.parse解析、恢复查询字符串
(1)查询字符串(url 参数)
- 说明:将发送给服务器的数据添加到URL中。
- 格式:将“?”放在 url 的末尾,再加上“参数=值”(key=value),多个参数用“&”隔开。
(2)解析查询字符串
-
parse_qs():返回字典
# 查询字符串 qs = 'name=user1&name=user2&age=25&height=180' print(urllib.parse.parse_qs(qs))
{'name': ['user1', 'user2'], 'age': ['25'], 'height': ['180']}
-
parse_qsl():返回列表
qs = 'name=user1&name=user2&age=25&height=180' print(urllib.parse.parse_qsl(qs))
[('name', 'user1'), ('name', 'user2'), ('age', '25'), ('height', '180')]
(3)恢复查询字符串
-
urlencode()
# 字典 query_dict = {'name': 'user', 'age': '25', 'height': '180'} # 将字典恢复成查询字符串 print(urllib.parse.urlencode(query_dict))
name=user&age=25&height=180
# 已有列表 lt = [('name', 'user1'), ('name', 'user2'), ('age', '25'), ('height', '180')] # 将列表恢复成查询字符串 print(urllib.parse.urlencode(lt))
name=user1&name=user2&age=25&height=180