Python 库手册:urllib URL 操作模块

urllib 是 Python 内置的标准库,用于处理 URL 操作、网络请求与响应处理。它提供了多个子模块,如 urllib.request、urllib.parse、urllib.error 和 urllib.robotparser,支持从互联网上获取数据、构造和解析 URL、处理异常等。

常见应用场景:

(1)发送 HTTP 请求并读取网页或 API 返回内容。

(2)设置请求头、自定义代理、处理重定向等。

(3)对 URL 编码、解析、拼接参数。

(4)捕获网络请求异常。

(5)判断网页是否允许被爬虫访问(robots.txt)。

  ◆  ◆

核心概念

1、urllib.request

用于发送 HTTP/HTTPS 请求,如打开网页、添加请求头、自定义请求对象等。

2、urllib.parse

提供 URL 编解码、拆解与拼接功能,是 URL 参数处理的核心模块。

3、urllib.error

定义了处理 HTTP 异常(如 404、503)或连接错误的异常类。

4、urllib.robotparser

可解析网站 robots.txt 文件,判断特定 URL 是否可被访问。

  ◆  ◆

应用举例

例 1:获取网页内容

from urllib import request
url = 'https://www.python.org'response = request.urlopen(url)html = response.read().decode('utf-8')  # 解码为字符串print(html)

例 2:GET 请求带参数

from urllib import request, parse
params = {'q': 'mediaTEA'}query_string = parse.urlencode(params)url = f'https://www.baidu.com/search?{query_string}'response = request.urlopen(url)print(response.status)

说明:

最后打印响应的状态码:

200 表示请求成功

403 表示被禁止访问

404 表示网页未找到

503 表示服务器暂时不可用

例 3:POST 请求

from urllib import request, parse
data = parse.urlencode({'username': 'admin', 'password': '123'}).encode()req = request.Request('https://httpbin.org/post', data=data)res = request.urlopen(req)print(res.read().decode())

例 4:解析 URL 结构

from urllib.parse import urlparse
url = 'https://www.example.com/path/page.html?query=abc#section'result = urlparse(url)print(result.netloc)  # 输出 www.example.comprint(result.path)    # 输出 /path/page.html

例 5:robots.txt 判断访问权限

from urllib import robotparser
rp = robotparser.RobotFileParser()rp.set_url('https://www.python.org/robots.txt')rp.read()print(rp.can_fetch('*', 'https://www.python.org/downloads/'))

  ◆  ◆

常用函数速览

urllib.request

urlopen(url, data=None, timeout=...)

打开 URL 并返回响应对象。

参数:

url: 字符串 URL 或 Request 对象

data: 可选,发送的数据(bytes)

timeout: 超时时间(秒)

返回:HTTPResponse 对象

Request(url, data=None, headers={}, method='GET')

创建一个自定义请求对象

参数:

url: 请求地址

data: 请求数据(POST 需传入 bytes)

headers: 字典形式的请求头

method: 请求方法,如 GET、POST 等

返回:Request 对象

build_opener(*handlers)

创建自定义 opener,可用于添加代理、身份认证等

返回:OpenerDirector 对象

install_opener(opener)

将自定义 opener 设置为全局默认 opener

返回:无

urllib.parse

urlencode(query)

将字典或键值对元组转换为 URL 查询字符串

参数:query 为字典或列表

返回:字符串,如 'a=1&b=2'

urlparse(url)

将 URL 拆解为 6 个组成部分

返回:ParseResult 对象,具有 scheme、netloc、path、params、query、fragment 属性

urljoin(base, url)

拼接相对 URL 与基础 URL,返回完整 URL

返回:字符串 URL

parse_qs(query)

解析查询字符串为字典形式

返回:{'key': ['value']} 的字典

urllib.error

URLError

用于捕获连接失败、解析失败等非 HTTP 状态错误

可通过 .reason 查看错误信息

HTTPError

URLError 的子类,用于捕获 HTTP 状态错误(如 404、500)

可通过 .code 查看状态码,.read() 获取错误页面内容

urllib.robotparser

RobotFileParser.set_url(url)

设置 robots.txt 文件 URL

RobotFileParser.read()

下载并读取 robots.txt 文件

RobotFileParser.can_fetch(useragent, url)

判断特定 user-agent 是否允许访问指定 URL

返回:布尔值

  ◆  ◆

补充说明

1、urllib 模块适合小规模数据交互或轻量级爬虫项目。

2、对于更复杂的请求(如会话管理、Cookie、自动跳转等),推荐使用第三方库 requests。

3、urllib 默认以 utf-8 编码处理字符串,遇到乱码建议检查 response.headers 的字符集声明。

4、urlopen 默认是 GET 请求,若传入 data 参数则为 POST。

5、响应对象的 .read() 方法返回的是 bytes 类型内容,需手动 .decode()。

图片

“点赞有美意,赞赏是鼓励”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值