对python3 urllib包与http包的使用详解


Posted in Python onMay 10, 2018

urllib包和http包都是面向HTTP协议的。其中urllib主要用于处理 URL,使用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通信实现库。HttpClient的目标是发送和接收HTTP报文。

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

HTTPConnection :基于HTTP协议的客户端,指定 URL(网址) 后,可以 发送请求报文 和 接收响应报文

HTTPRespone :基于 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.getrespone( )

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

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

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

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

(2)HTTPRespone:

HTTPRespone对象:一旦用 HTTPConnection 成功连接,可以调用HTTPConnection.getrespone()返回该实例(HTTPRequest实例)。

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

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

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

HTTPRespone.status #返回状态码

HTTPRespone.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 相关文章推荐
Python中几种操作字符串的方法的介绍
Apr 09 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
Jun 20 Python
利用Python实现微信找房机器人实例教程
Mar 10 Python
Python Pandas 箱线图的实现
Jul 23 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
Python虚拟环境venv用法详解
May 25 Python
python调用私有属性的方法总结
Jul 24 Python
Python selenium爬取微信公众号文章代码详解
Aug 12 Python
python使用selenium爬虫知乎的方法示例
Oct 28 Python
pytorch锁死在dataloader(训练时卡死)
May 28 Python
Python编写冷笑话生成器
Apr 20 Python
Python3处理HTTP请求的实例
May 10 #Python
python字符串与url编码的转换实例
May 10 #Python
Python中的单继承与多继承实例分析
May 10 #Python
python3处理含有中文的url方法
May 10 #Python
Python异常处理操作实例详解
May 10 #Python
解决python3 网络请求路径包含中文的问题
May 10 #Python
Python之文字转图片方法
May 10 #Python
You might like
php 执行系统命令的方法
2009/07/07 PHP
PHP文件注释标记及规范小结
2012/04/01 PHP
解析百度搜索结果link?url=参数分析 (全)
2012/10/09 PHP
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
对angularJs中$sce服务安全显示html文本的实例
2018/09/30 Javascript
手把手教你如何使用nodejs编写cli命令行
2018/11/05 NodeJs
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
js实现提交前对列表数据的增删改查
2020/01/16 Javascript
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:52]PWL S2开团时刻第四期——DOTA2成语故事
2020/12/03 DOTA
[06:48]DOTA2-DPC中国联赛2月26日Recap集锦
2021/03/11 DOTA
Python入门之三角函数sin()函数实例详解
2017/11/08 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
python基于opencv检测程序运行效率
2019/12/28 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
Python CategoricalDtype自定义排序实现原理解析
2020/09/11 Python
Python对excel的基本操作方法
2021/02/18 Python
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
几道数据库的面试题或笔试题
2014/05/31 面试题
创业计划实施的7大步骤
2014/02/05 职场文书
个人综合鉴定材料
2014/05/23 职场文书
物流专业专科生职业生涯规划书
2014/09/14 职场文书
发票退票证明
2015/06/24 职场文书
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python