Python个人学习笔记 urllib库
发送请求
拆分/合并URL
编码/解码URL

发送请求
⑴ 发送GET请求 urllib.request.urlopen(url ,data=None [,timeout])
返回一个http.client.HTTPResponse对象。
参数timeout:用于设置超时时间,单位为秒。请求未在时限内完成会抛出超时异常urllib.error.URLError: <urlopen error timed out>。
http.client.HTTPResponse对象的常用属性/方法
status:表示HTTP响应的状态码。200表示成功,404表示Not Found等。
reason:表示与HTTP状态码相对应的原因短语。提供有关状态码的简短描述,例如"OK"、"Not Found"等。
headers:表示HTTP响应的头部信息。它是一个类似字典的对象,包含响应头部字段的名称和值。
version:表示HTTP协议的版本。
getheader(name, default=None):获取指定名称的响应头字段的值。如果该字段不存在,则返回指定的默认值。
getheaders():获取所有响应头字段的名称和值。返回一个列表,每个元素是一个包含字段名称和值的元组。
read([size]):读取HTTP响应的内容(HTML代码)。返回一个字节串。可选参数size指定要读取的字节数。如果没有指定size,则读取所有的响应内容。
⑵ 发送POST请求 urllib.request.urlopen(url ,data [,timeout])
参数data:要发送的数据。默认为None。如果提供了数据,则请求将变为POST请求,并将数据作为请求主体发送到服务器。data参数应该是一个字节流(bytes)。
可以用来登录帐号密码,但是现在登录基本都要验证码,不好办。
⑶ 伪装成浏览器 urllib.request.Request(url [,data=None] ,headers)
模拟浏览器发送网络请求,可避开反爬措施。

拆分/合并URL
⑴ urllib.parse.urlparse()
urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)
参数:
urlstring:URL。
scheme:默认协议。
allow_fragments:是否解析片段标识符。默认为True。
返回一个六元组(scheme,netloc,path,params,query,fragment)。
scheme:协议。
netloc:域名。
path:路径。域名之后/隔开的部分。
params:附加参数。;隔开的一系列键值对。
query:查询条件。?之后的部分,&隔开的一系列键值对。
fragment:片段标识符。#之后的部分。加载页面时会自动跳转到片段标识符指定部分。若allow_fragments为False,则fragment部分会被加到上一个非空部分中。
⑵ urllib.parse.urlunparse()
urllib.parse.urlparse()的反函数。将有六个元素的可迭代对象合并成URL。成分顺序必须对应。
⑶ urllib.parse.urlsplit()
与urllib.parse.urlparse()类似,但不解析params部分,返回一个五元组。
⑷ urllib.parse.urlunparse()
urllib.parse.urlparse()的反函数。
⑸ urllib.parse.urljoin()
urllib.parse.urljoin(base,url)
将URL碎片拼接为完整URL。
base和url拼接时,base中不完整的部分会被覆盖。

编码/解码URL
⑴ urllib.parse.quote()
将非英文字符编码为URL中表示的形式。空格会被编译为%20。
⑵ urllib.parse.urlencode()
将非英文字符编码为URL中表示的形式。空格会被编译为加号+。
参数为字典,会自动以=连接键值对。
⑶ urllib.parse.unquote()
urllib.parse.quote()和urllib.parse.urlencode()的反函数。
解码urllib.parse.urlencode()生成的码时,需要把+替换成%20。
⑷ urllib.parse.parse_qs() / urllib.parse.parse_qsl()
解码query部分,并返回一个字典 / 元组列表。
