对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结合selenium获取XX省交通违章数据的实现思路及代码
Jun 26 Python
python的numpy模块安装不成功简单解决方法总结
Dec 23 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
Jan 02 Python
Python中getpass模块无回显输入源码解析
Jan 11 Python
Python格式化输出%s和%d
May 07 Python
python匹配两个短语之间的字符实例
Dec 25 Python
对python 多线程中的守护线程与join的用法详解
Feb 18 Python
python实现差分隐私Laplace机制详解
Nov 25 Python
python 中的[:-1]和[::-1]的具体使用
Feb 13 Python
Python yield的用法实例分析
Mar 06 Python
Python控制鼠标键盘代码实例
Dec 08 Python
python 如何做一个识别率百分百的OCR
May 29 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
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
第七节--类的静态成员
2006/11/16 PHP
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
2017/11/25 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
2019/09/16 PHP
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
JS实现来回出现文字的状态栏特效代码
2015/10/31 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
DOM 事件的深入浅出(一)
2016/12/05 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
iView框架问题整理小结
2018/10/16 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
详解Vue的mixin策略
2020/11/19 Vue.js
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
2018/05/15 Python
python一行sql太长折成多行并且有多个参数的方法
2018/07/19 Python
如何基于Python批量下载音乐
2019/11/11 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
Python操作Jira库常用方法解析
2020/04/10 Python
python中线程和进程有何区别
2020/06/17 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
Pyside2中嵌入Matplotlib的绘图的实现
2021/02/22 Python
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
德国大型箱包和皮具商店:Koffer
2019/10/01 全球购物
党员自我评价范文2015
2015/03/03 职场文书
学年个人总结范文
2015/03/05 职场文书
会计岗位职责范本
2015/04/02 职场文书
中秋节主题班会
2015/08/14 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
完美解决golang go get私有仓库的问题
2021/05/05 Golang
MySQL数据库表约束讲解
2022/06/21 MySQL