URLError
来自urllib库的error模块,需要imort error
实例1:当运行一个不存在的页面,如果没有异常处理,直接
from urllib import request,error
request.urlopen('https://cuiqingcai.com/index.htm')
则会报错:
实例2::加上异常处理机制
from urllib import request,error
try:
response = request.urlopen('https://cuiqingcai.com/index.htm')
except error.URLError as e:
print(e.reason)
结果如下:
通过如上操作,可以避免程序异常终止。
HTTPError
它是URLError子类,专门用来处理HTTP请求错误。有如下3个属性:
- code:返回HTTP状态码
- reason:返回错误原因
- headers:返回请求头
实例3:
from urllib import request,error
try:
response = request.urlopen('https://cuiqingcai.com/index.htm')
except error.HTTPError as e:
print(e.reason,e.code,e.headers,sep='\n')
结果:
补充:
因为URLError是HTTPError的父类,所以更好的写法是先捕获子类的错误,再去补充父类的错误(即先特殊,后一般)。
写法如下:
from urllib import request,error
try:
response = request.urlopen('https://cuiqingcai.com/index.htm')
except error.HTTPError as e:
print(e.reason,e.code,e.headers,sep='\n')
except error.URLError as e:
print(e.reason)
else:
print('Request Successfully')
urllib库里提供了parse模块,定义了处理URL的标准接口,例如实现URL各部分的抽取、合并以及链接转换。下面是该模块常用的方法:
urlparse()
实例4:
from urllib.parse import urlparse
result = urlparse('http://www.baidu.com/index.html;user?id=5#comment')
print(type(result),result)
输出:
可以看到,urlparse()方法将其拆分为6个部分:
- scheme:协议
- netloc:域名
- path:路径
- params:参数
- query:位于?后面,查询条件,一般用于GET类型的URL
- fragment:位于#后面,锚点,用于直接定位页面内部的下拉位置
urljoin()
生成链接,基础链接作为第一个参数,新链接作为第二个参数。该方法分析基础链接的scheme、netloc和path这3个部分内容并对新链接缺失部分进行补充(不缺失则不处理)。
其他链接方法还有:urlunparse()和urlunsplit()。
实例5:
from urllib.parse import urljoin
print(urljoin('http://www.baidu.com','FAQ.html'))
print(urljoin('http://www.baidu.com','https://cuiqingcai.com/FAQ.html'))
结果:
urlencode() & parse_qs &parse_qsl
实例6:
from urllib.parse import urlencode,parse_qs,parse_qsl
param = {
'name':'germey',
'age': 22
}
base_url = 'http://www.baidu.com?'
param1 = urlencode(param) #序列化
print(param1)
url = base_url + param1
print(url)
print(parse_qs(param1)) #对应的反序列方法,转回字典
print(parse_qsl(param1)) #另一个反序列方法,转回元组
结果:
impr
首先用字典将参数表示出来,然后用urlencode()方法对其进行序列化。
quote() & unquote
该方法用于内容和URL编码格式互相转换。
实例7:
from urllib.parse import quote,unquote
keyword = '壁纸'
Q_keyword = quote(keyword)
print(Q_keyword)
url = 'https://www.baidu.com/s?wd='+ Q_keyword
print(url)
UQ_keyword = unquote(Q_keyword)
print(UQ_keyword)
结果: