Python3中urllib与http模块的核心用法解析
本文详解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包的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













