Python基础请求库urllib模块使用指南

Cora
Cora
发布时间:2026-10-11| 4人浏览过
原创

本文详解Python内置urllib模块的网络请求操作,涵盖GET/POST请求构造、URL参数编码、自定义HTTP请求头、JSON数据传输、异常处理及文件下载与代理配置。通过标准代码示例,帮助开发者快速掌握原生HTTP交互方法,提升脚本稳定性与兼容性。

构建基础HTTP请求

发送简单GET请求

直接使用urllib.request.urlopen()向目标地址发起请求,适用于获取公开网页或API的静态HTML资源。

import urllib.request

url = 'https://www.example.com'
response = urllib.request.urlopen(url)
html = response.read()
print(html)

拼接带参数的GET请求

当需要查询或筛选数据时,需先将字典形式的参数字典转为URL编码字符串,再拼接至原URL末尾。

import urllib.request
import urllib.parse

url = 'https://www.example.com/search'
params = {'q': 'python', 'page': 1}
url_with_params = url + '?' + urllib.parse.urlencode(params)
response = urllib.request.urlopen(url_with_params)
html = response.read()
print(html)

配置与发送POST数据

提交表单数据

POST请求通常用于提交敏感信息或结构化数据。需将参数字典编码为UTF-8字节流,并通过method='POST'指定请求方式。

import urllib.request
import urllib.parse

url = 'https://www.example.com/post'
data = {'username': 'user', 'password': 'pass'}
data_encoded = urllib.parse.urlencode(data).encode('utf-8')
req = urllib.request.Request(url, data=data_encoded, method='POST')
response = urllib.request.urlopen(req)
html = response.read()
print(html)

传输JSON格式载荷

现代API多采用JSON格式交换数据。需使用json.dumps()序列化对象,并在请求头中声明Content-Type: application/json以确保服务端正确解析。

import urllib.request
import json

url = 'https://www.example.com/api'
data = {'key': 'value'}
data_encoded = json.dumps(data).encode('utf-8')
headers = {'Content-Type': 'application/json'}
req = urllib.request.Request(url, data=data_encoded, headers=headers, method='POST')
response = urllib.request.urlopen(req)
result = response.read()
print(result)

自定义请求头与模拟访问

部分网站会校验User-Agent或Referer。通过urllib.request.Request实例化时可传入字典型headers参数,灵活替换或追加头部信息。

import urllib.request

url = 'https://www.example.com'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
req = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(req)
html = response.read()
print(html)

处理请求异常与状态码

网络请求易受连接超时、权限拒绝或路由变更影响。务必使用try-except块捕获urllib.error.HTTPError,通过异常对象的.code和.reason属性获取具体故障原因。

import urllib.request
from urllib.error import HTTPError

url = 'https://www.example.com/notfound'
try:
    response = urllib.request.urlopen(url)
    html = response.read()
    print(html)
except HTTPError as e:
    print(f'HTTP Error: {e.code} - {e.reason}')

文件下载与代理服务器配置

一键下载远程资源

对于图片、压缩包等二进制文件,可直接调用urlretrieve()自动创建连接并写入本地磁盘。

import urllib.request

url = 'https://www.example.com/image.jpg'
urllib.request.urlretrieve(url, 'downloaded_image.jpg')
print('Image downloaded successfully!')

接入代理节点绕过限制

当IP被封禁或需跨区访问时,可通过ProxyHandler定义代理规则,并用build_opener()生成具备代理能力的处理器对象替代默认的opener。

import urllib.request

url = 'https://www.example.com'
proxy_handler = urllib.request.ProxyHandler({'http': 'http://your_proxy', 'https': 'https://your_proxy'})
opener = urllib.request.build_opener(proxy_handler)
response = opener.open(url)
html = response.read()
print(html)

总结与注意事项

urllib作为Python标准库中的基础网络组件,提供了完整的HTTP协议支持。掌握其GET/POST构造、参数编码、头部注入及异常隔离机制,可覆盖多数轻量级接口调试与自动化采集场景。在实际项目中,若需更简洁的语法或异步并发能力,可进一步结合第三方库进行扩展。

以上就是Python urllib模块网络请求操作的详细内容,更多关于Python标准库使用的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。