对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定向爬虫校园论坛帖子信息
Jul 23 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
Python中几种属性访问的区别与用法详解
Oct 10 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
Python实现字符型图片验证码识别完整过程详解
May 10 Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 Python
python实现连连看辅助之图像识别延伸
Jul 17 Python
通过python3实现投票功能代码实例
Sep 26 Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
深入了解python列表(LIST)
Jun 08 Python
Python实现ElGamal加密算法的示例代码
Jun 19 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语法(3)
2006/10/09 PHP
PHP获取php,mysql,apche的版本信息示例代码
2014/01/16 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
PHP递归统计系统中代码行数
2019/09/19 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
javascript天然的迭代器
2010/10/29 Javascript
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
jquery实现网站超链接和图片提示效果
2013/03/21 Javascript
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
javascript里使用php代码实例
2014/12/13 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
vue多种弹框的弹出形式的示例代码
2017/09/18 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
深入学习Python中的上下文管理器与else块
2017/08/27 Python
Python插件virtualenv搭建虚拟环境
2017/11/20 Python
python输入错误密码用户锁定实现方法
2017/11/27 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
PyQt5实现简单的计算器
2020/05/30 Python
Python使用Chrome插件实现爬虫过程图解
2020/06/09 Python
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
Timberland德国官网:靴子、鞋子、衣服、夹克及配件
2019/12/10 全球购物
教师党员公开承诺事项
2014/05/28 职场文书
社会学专业求职信
2014/07/17 职场文书
解除劳动合同证明书
2014/09/26 职场文书
2014年团委工作总结
2014/11/13 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
《地。-关于地球的运动-》单行本第七集上市,小说家朝井辽献上期待又害怕的推荐文
2022/03/31 日漫