urllib
是 Python 的一个内置库,用于处理 URL。它提供了一系列模块来帮助开发者更轻松地处理网络请求。这个模块包含以下子模块:
urllib.request
:用于打开和读取 URL。urllib.parse
:用于解析 URL。urllib.error
:包含由urllib.request
抛出的异常类。urllib.robotparser
:用于解析 robots.txt 文件。
urllib.request 模块
使用 urlopen 打开 URL
urllib.request.urlopen()
函数用于打开一个指定的 URL,并返回一个类似文件的对象。如果成功打开 URL,则返回一个对象,该对象具有 read()、readline()、readlines()、close() 和 fileno() 方法。
import urllib.request response = urllib.request.urlopen('https://www.example.com/') print(response.read().decode('utf-8'))
自定义请求头
有时需要发送带有自定义头部信息的请求。可以通过构造 Request
对象来实现这一点。
-- -------------------- ---- ------- ------ -------------- --- - -------------------------- ------- - - ------------- ------------ -------- -- ----- ------ ---- ------------------ ------- ---- ------ -------------------- -------------- - --- - --------------------------- ---------------- -------- - --------------------------- --------------------------------------展开代码
处理 HTTP 错误
当访问的 URL 返回错误代码时,urlopen()
将抛出一个 HTTPError
异常。可以捕获这些异常并进行相应的处理。
-- -------------------- ---- ------- ------ -------------- ------ ------------ ---- -------- - -------------------------------------------------- ----------- ------ ---------------------- -- -- ------------- --------- ------ --------------------- -- -- --------------- ----- ----------------------展开代码
设置超时时间
为了防止请求挂起,可以设置一个超时时间。超时时间单位为秒。
import urllib.request try: response = urllib.request.urlopen('https://www.example.com/', timeout=10) print(response.status) except urllib.error.URLError as e: print(e.reason)
urllib.parse 模块
解析 URL
urllib.parse.urlparse()
函数用于将 URL 字符串解析为一个 ParseResult
对象,该对象包含多个部分,如 scheme、netloc、path、params、query 和 fragment。
-- -------------------- ---- ------- ---- ------------ ------ -------- --- - ------------------------------------------------------------------- ---------- - ------------- ------------------------ - --- ----- ------------------------ - --- --------------- ---------------------- - --- ----- ----------------------- - --- --------------------------- -------------------------- - --- --------展开代码
构造 URL
urllib.parse.urlunparse()
函数用于将 ParseResult
对象重新组合成 URL 字符串。
from urllib.parse import ParseResult, urlunparse result = ParseResult(scheme='https', netloc='www.example.com', path='/path', params='', query='param1=value1¶m2=value2', fragment='fragment') url = urlunparse(result) print(url) # 输出: https://www.example.com/path?param1=value1¶m2=value2#fragment
URL 编码和解码
urllib.parse.quote()
和 urllib.parse.unquote()
分别用于对 URL 中的特殊字符进行编码和解码。
from urllib.parse import quote, unquote encoded_url = quote('https://www.example.com/path?param1=value1¶m2=value2#fragment') print(encoded_url) decoded_url = unquote(encoded_url) print(decoded_url)
urllib.error 模块
异常处理
urllib.error
模块包含了由 urllib.request
抛出的异常类。最常用的两个异常是 URLError
和 HTTPError
。
-- -------------------- ---- ------- ------ -------------- ------ ------------ ---- -------- - -------------------------------------------------- ----------- ------ ---------------------- -- -- ------------- --------- ------ --------------------- -- -- ---------------展开代码
URLError
URLError
是一个基类,用于表示 URL 请求失败的各种原因。它通常会附带一个错误原因字符串。
import urllib.request import urllib.error try: response = urllib.request.urlopen('https://www.example.com/', timeout=10) except urllib.error.URLError as e: print(e.reason)
HTTPError
HTTPError
是 URLError
的子类,专门用于处理 HTTP 请求返回的错误代码。除了继承 URLError
的属性外,它还具有 code
、reason
和 headers
属性。
import urllib.request import urllib.error try: response = urllib.request.urlopen('https://www.example.com/', timeout=10) except urllib.error.HTTPError as e: print(e.code, e.reason) print(e.headers)
以上就是 Python3 urllib
模块的基本使用方法。通过这些示例,您可以开始使用 urllib
来处理网络请求了。希望本章内容能帮助您更好地理解和运用 urllib
模块。