Python3中urllib与http模块的核心用法解析

Theo
Theo
发布时间:2026-10-13| 5人浏览过
原创

本文详解Python3中urllib与http模块的使用方法。urllib包负责URL处理,包含request、error和parse等子模块,支持通过urlopen打开网页及urlretrieve下载文件。http包提供底层HTTP协议封装,如HTTPConnection用于发送GET/POST请求并获取响应状态码及内容。文章结合代码实例,帮助开发者掌握网络编程基础。

urllib包和http包均基于HTTP协议设计。urllib侧重于URL的处理,其操作方式类似于本地文件的读写;而http包则是对HTTP协议的底层封装,主要服务于urllib.request模块。

1. urllib包简介

2. http包简介

1. urllib包简介

urllib包主要包含以下模块:

1. urllib.request —— 用于打开URL网址;

2. urllib.error —— 定义了urllib.request可能引发的常见异常;

3. urllib.parse —— 用于解析URL;

具体方法说明如下:

urllib.request.urlopen( url,data,proxies ):用于打开指定的URL。

参数说明如下:

url:需要操作的URL地址。

data:可选参数,用于向URL传递数据。

proxies:可选参数,指定使用的代理地址。

import urllib.request
url = 'http://www.baidu.com'   #网页为百度首页
respone = urllib.request.urlopen(url) #打开url地址,并返回一个 HTTPRespone实例
html = respone.read().decode('utf-8') #调用实例的 read()方法,并用 utf-8进行解码处理。就得出完整的百度的HTML文件
print(html) 

部分打印结果示例:

<html>
<head>
 
 <meta http-equiv="content-type" content="text/html;charset=utf-8">
 <meta http-equiv="X-UA-Compatible" content="IE=Edge">
	<meta content="always" name="referrer">
 <meta name="theme-color" content="#2932e1">
 <link rel="shortcut icon" href="/favicon.ico" rel="external nofollow" type="image/x-icon" />
 <link rel="search" type="application/opensearchdescription+xml" href="/content-search.xml" rel="external nofollow" title="百度搜索" /> 
 <link rel="icon" sizes="any" mask href="//www.baidu.com/img/baidu.svg" rel="external nofollow" >

urllib.request.urlretrieve(url,filename,reporthook,data):用于将URL指向的HTML文件下载并保存为本地文件。

参数说明如下:

url:需要下载的网页地址。

filename:保存在本地的路径,为可选参数。

reporthook:一个回调函数,为可选参数。

data:发送的数据,通常用于POST请求,为可选参数。

特别注意:关于urlretrieve()的回调函数reporthook,它可用于显示下载进度,该功能已几乎封装完毕。

import urllib.request
def callbackfunc(blocknum, blocksize, totalsize): #这三个参数是由 urlretrieve自动赋值的
 '''回调函数
 @blocknum: 已经下载的数据块
 @blocksize: 数据块的大小
 @totalsize: 远程文件的大小
 '''
 percent = 100.0 * blocknum * blocksize / totalsize
 if percent > 100:
  percent = 100
 print( "%.2f%%"% percent) #保留两位小数
url = 'http://www.sina.com'
local = 'd:\\sina.html'        #下载的html文件保存在 d盘的sina.html里
urllib.request.urlretrieve(url,local,callbackfunc) #没下载完一个数据块,就会执行回调函数一次

执行结果示例:

//只显示局部 
0.00% 
1.38% 
2.76% 
4.13% 
5.51% 
6.89% 

2. http包简介

http包提供了HTTP协议的一些功能,主要模块包括:

http.client —— 提供底层的HTTP协议功能,供urllib.request模块使用;

http.server —— 基于socketserver模块提供基本的HTTP服务器类;

http.cookies —— cookies的管理工具。

http.client模块详解:

HttpClient并非浏览器,而是一个客户端HTTP通信实现库。其目标是发送和接收HTTP报文。

两个主要类(用于客户端):

HTTPConnection:基于HTTP协议的客户端,指定URL后,可发送请求报文并接收响应报文;

HTTPResponse:基于HTTP协议的服务端回应。一旦通过HTTPConnection成功连接,可调用相关方法返回该实例(HTTPRequest实例)。

(1)HTTPConnection的方法:

构造方法:HTTPConnection( host,port,[timeout] ),返回一个HTTPConnection实例。

host:表示主机域名或IP地址。

port:表示端口号。

timeout:阻塞操作将在给定时间后超时,为可选参数。

发送请求报文方法:HTTPConnection.request( method,url,body =None,headers = {} )。

method:发送的操作类型,通常为GET或POST。

url:进行操作的URL地址。

body:所发送的数据。

headers:发送的HTTP头部,为字典类型。

获取响应报文方法:HTTPConnection.getresponse()。

关闭与服务器的连接:HTTPConnection.close()。

发送一个头部:HTTPConnection.putheader( header,args[ ] ),头部以字典方式发送。

发送一个空白行到服务器,标志头部Header的结束:HTTPConnection.endheaders()。

发送数据到服务器:HTTPConnection.send( data ),应在endheaders()之后和getresponse()之前调用。

(2)HTTPResponse:

HTTPResponse对象:一旦通过HTTPConnection成功连接,可调用HTTPConnection.getresponse()返回该实例(HTTPRequest实例)。

HTTPResponse.getheader(name):返回头部中name字段对应的值。

HTTPResponse.getheaders():以元组方式返回整个头部的信息。

HTTPResponse.read():返回响应报文中的body部分,即正文部分。

HTTPResponse.status:返回状态码。

HTTPResponse.version:返回HTTP协议版本。

http包应用实例。

from http.client import HTTPConnection

con = HTTPConnection('www.baidu.com',80)
con.request('GET','/')   #发送请求报文
res = con.getresponse()   #获取响应报文对象
print(res.status) #200 (表示状态码)
print(res.reason) #OK	 (表示状态码对应的意义)
print(res.read().decode('utf-8')) #打印www.baidu.com的html

以上这篇对python3 urllib包与http包的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。

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

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 算法库。