怎样通过 urllib库 发送 HTTP 请求?

urllib库主要由四个模块组成:
- urllib.request 打开和读取 URL
- urllib.error 包含 urllib.request 抛出的异常
- urllib.parse 用于解析 URL
- urllib.robotparser 用于解析
robots.txt
文件
1. 使用urllib.parse
解析URL
使用
urlparse()
分段URL
在这里,我们用
urlparse()
函数构建了一个实例对象(ParseResult类型),并将其赋值给result
,以便调用。事实上,ParseResult类型对象包含6个部分:
- scheme,代表协议,通常在"://"前面,这里即
http
- netloc,代表域名,通常在第一个"/"前面,这里即
docs.python.org:80
- path,代表访问路径,通常在域名之后,这里即
/3/library/urllib.parse.html
- params,代表参数,通常在"?"之前,这里不存在
- query,代表查询条件,通常在"?"之后,这里也不存在
- fragment,代表瞄点,通常在"#"之后,用于直接定位页面内部的下拉位置,这里即
url-parsing
- scheme,代表协议,通常在"://"前面,这里即
使用
urlunparse()
构造URL
事实上,在
urllib.parse
中,解析URL的方法不仅有urlparse()
函数,还有urlsplit()
等;构造URL的方法不仅有urlunparse()
函数,还有urlunsplit
和urlencode()
等。
2. 使用urllib.request
打开 URL,模拟发送请求
使用
urllib.request.urlopen
函数发送HTTP请求,构造对象
urllib.request.urlopen
函数构造一个接受请求的实例对象(HTTPResponse类型),并将其赋值给response
变量,以便之后使用。read()
方法可以得到返回的网页内容。事实上,HTTPResponse类型的对象,不仅可以调用read()
和getheaders()
等方法,还可以调用status
和msg
等属性来查看请求发送后返回的一系列信息。通过
Request
类灵活配置参数,构建请求信息对象
这里我们依然使用
urlopen()
方法来发送HTTP请求,但是传递的不再是单纯的URL,而是一个Request
类型的对象。通过集合各种参数,将其独立成一个对象,可以更加丰富和灵活地配置参数。这里的
headers
即为请求头,method
即为请求方法使用
Handler
处理器进行高级操作(以Cookies处理为例)
HTTPCookieProcessor
是urllib.request
模块里用于处理Cookie的一个类。值得注意的是这里打开链接的不再是request.urlopen()
函数,而是用Opener对象的open()
方法来发出请求。
3. 使用urllib.error
捕捉请求错误,进行异常处理
使用
URLError
类捕捉URL异常在这里如果发生网页不存在等请求异常,我们就可以通过
URLError
捕捉异常,从而避免程序的异常终止使用
HTTPError
类捕捉HTTP请求错误