urllib库(四)

异常与捕获

URLError产生的原因主要有:
**1.**没有连接网络
**2.**股务器连接失败
**3.**找不到指定的服务器

import urllib.request 
import urllib.error

# 构建请求对象
request=urllib.request.Request('http://www.adadfwec.com')

try:
	# 发送请求
	response = urllib request urlopen ( request , timeout = 3)
except urllib.error.URLError as error:
	print(error)

HttpError异常和捕获
每一个服务器的HTTP响应都有一个数字响应码,这些响应码有些表示无法处理请求內容,如果无法处理:
urlopen会抛出 HTTPError。 HTTPError是 URLError的子类,它的对象拥有一个整型的code属性,表示服务器
返回的错误代码。下面是一个例子,具体如下:

import urllib.request 
import urllib.error

# 构建请求对象
request=urllib.request.Request('http://www.baiud.com/net')

try:
	# 发送请求
	response = urllib request urlopen (request)
	print(response.read().decode())
except urllib.error.HTTPError as error:
	print(error)
结果如下:
HTTP Error 404: Not Found
<think>好的,我现在需要向用户介绍urllib。首先,我要回忆一下urllib的基本信息,确保自己没有记错。urllib是Python的标准,用于处理URL相关的操作,比如发送HTTP请求、处理响应等。记得它有几个模块,比如urllib.request、urllib.parse等等。 接下来,我得组织一下结构,确保回答清晰。用户可能需要知道urllib的组成部分和每个模块的功能,最好分点说明。比如,urllib.request用于打开和读取URL,urllib.parse用于解析URL,urllib.error处理异常,urllib.robotparser处理robots.txt文件。这些模块需要一一解释,每个模块的作用和常用方法。 然后,用户可能想知道基本用法,比如如何发送GET请求,如何处理POST请求,或者如何设置请求头。这时候需要给出一些简单的代码示例,但要注意用中文说明,并且按照系统级指令中的格式要求,数学表达式用$...$,但代码应该用代码块吗?不过用户这里可能只需要文字描述,避免使用代码块,而是用中文步骤说明。不过可能需要提到相关函数,比如urlopen()、Request对象等。 另外,要注意提到异常处理,比如urllib.error中的HTTPError和URLError,说明在请求过程中可能会遇到的错误以及如何处理。这部分对用户来说很重要,因为实际使用中经常会遇到404或500错误。 还有,urllib相比第三方如requests有什么优缺点?虽然用户没直接问,但可能隐含这个需求。可以简要提到urllib是标准,无需安装,但API不够友好,而requests更简洁,但需要额外安装。这样用户可以根据需求选择。 最后,给出一个综合示例,演示如何发送带参数的GET请求,处理响应和异常。这样用户能有一个整体的认识。同时提醒用户注意网络请求的基本注意事项,比如添加请求头、处理编码问题等。 检查一下有没有遗漏的部分,比如urllib.parse中的urlencode函数,用于生成查询字符串,这在构造带参数的URL时非常有用。需要提到这个函数的用法,比如将字典转换为URL参数。 可能还需要提到Python 3中urllib的结构,因为Python 2中urlliburllib2是分开的,但在Python 3中已经整合成urllib。这点需要说明清楚,避免用户混淆。 总结一下,回答的结构应该是:概述urllib,分模块介绍,基本用法(GET/POST请求),异常处理,解析URL,以及一个综合示例。同时比较与第三方的差异,帮助用户理解使用场景。确保每个部分简洁明了,步骤清晰,符合用户可见层的要求。</think>urllib 是 Python 的标准,用于处理与 URL 相关的网络操作。它提供了一系列模块,帮助开发者完成 HTTP 请求、URL 解析、异常处理等任务。以下是分步介绍: --- ### 一、urllib 的组成模块 1. **`urllib.request`** 用于打开和读取 URL,支持设置请求头、表单提交等。 - 核心函数:`urlopen()` ```python from urllib.request import urlopen response = urlopen('https://www.example.com') content = response.read() # 读取响应内容 ``` 2. **`urllib.parse`** 用于解析和构造 URL。 - `urlparse()`: 拆分 URL 的各个部分(协议、域名、路径等)。 - `urlencode()`: 将字典转换为 URL 查询字符串。 ```python from urllib.parse import urlencode params = {'key1': 'value1', 'key2': 'value2'} query_string = urlencode(params) # 输出: key1=value1&key2=value2 ``` 3. **`urllib.error`** 处理请求过程中的异常。 - `HTTPError`: HTTP 错误(如 404、500)。 - `URLError`: URL 解析或连接失败。 4. **`urllib.robotparser`** 解析网站的 `robots.txt` 文件,判断是否允许爬取。 --- ### 二、基本用法示例 #### 1. 发送 GET 请求 ```python from urllib.request import urlopen # 发送请求并读取响应 response = urlopen('https://httpbin.org/get') print(response.status) # 状态码(如 200) print(response.read().decode('utf-8')) # 解码内容 ``` #### 2. 发送 POST 请求 ```python from urllib.request import urlopen, Request from urllib.parse import urlencode # 构造表单数据 data = urlencode({'name': 'Alice', 'age': 25}).encode('utf-8') # 创建 Request 对象并设置请求方法 request = Request('https://httpbin.org/post', data=data, method='POST') # 发送请求 response = urlopen(request) print(response.read().decode()) ``` #### 3. 设置请求头 ```python headers = {'User-Agent': 'Mozilla/5.0'} request = Request('https://httpbin.org/headers', headers=headers) response = urlopen(request) ``` --- ### 三、异常处理 ```python from urllib.request import urlopen from urllib.error import HTTPError, URLError try: response = urlopen('https://example.com/404-page') except HTTPError as e: print(f"HTTP错误: {e.code} - {e.reason}") except URLError as e: print(f"URL错误: {e.reason}") ``` --- ### urllib 的优缺点 - **优点** - 无需安装,Python 内置。 - 功能全面,覆盖基本网络操作。 - **缺点** - API 设计较底层,使用不如 `requests` 简洁。 - 需要手动处理编码、Cookie 等细节。 --- ### 五、完整示例(带参数和异常处理) ```python from urllib.request import Request, urlopen from urllib.parse import urlencode from urllib.error import HTTPError url = 'https://httpbin.org/get' params = {'page': 1, 'limit': 10} query = urlencode(params) full_url = f"{url}?{query}" try: request = Request(full_url, headers={'User-Agent': 'Test'}) with urlopen(request) as response: print(response.read().decode('utf-8')) except HTTPError as e: print(f"请求失败: {e.code}") ``` --- ### 六、适用场景 - 快速实现简单的 HTTP 请求。 - 项目限制不能安装第三方(如 `requests`)。 - 需要精细控制请求过程(如自定义协议处理器)。 如果需要更简洁的 API 或高级功能(如会话保持、SSL 验证),建议使用第三方 `requests`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值