对python3 urllib包与http包的使用详解
作者:ZJE_ANDY 发布时间:2022-08-04 15:20:14
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
来源:https://blog.csdn.net/u014453898/article/details/71713681


猜你喜欢
- 一道Python课作业题,大致如下:编写一个类:该类Building应具有以下方法:●一个构造函数,它根本不接受任何参数(除了通常的`sel
- 本文实例讲述了Go语言转换所有字符串为大写或者小写的方法。分享给大家供大家参考。具体如下:Go语言的string模块包含了ToLower和T
- 当你连接一个MySQL服务器时,你通常应该使用一个口令。口令不以明文在连接上传输。所有其它信息作为能被任何人读懂的文本被传输。如果你担心这个
- 爬虫就是请求网站并提取数据的自动化程序。其中请求,提取,自动化是爬虫的关键!下面我们分析爬虫的基本流程爬虫的基本流程发起请求通过HTTP库向
- 本文实例为大家分享了python实现在线翻译的具体代码,供大家参考,具体内容如下具体效果请看图代码:import urllib.reques
- 应用场景:在进行多选的时候一般默认显示第一个。实现方法:纯vue实现例子:<span v-for="(one,index)
- 报错一$ php artisan migrateIlluminate\Database\QueryException : could not
- Python中除了字典,列表,元组还有一个非常好用的数据结构,那就是set了,灵活的运用set可以减去不少的操作(虽然set可以用列表代替)
- 思路:遍历文件夹下面的文件夹如果文件夹名称等于".svn",则修改文件夹的属性(因为".svn"的文
- k-means算法思想较简单,说的通俗易懂点就是物以类聚,花了一点时间在python中实现k-means算法,k-means算法有本身的缺点
- 这篇博客对于考公人或者其他用华图或者粉笔做题的人比较友好,通过输入网址可以自动化获取华图以及粉笔练习的错题。粉笔网站我们从做过的题目组中获取
- MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能
- 本文实例讲述了python实现的AES双向对称加密解密与用法。分享给大家供大家参考,具体如下:高级加密标准(Advanced Encrypt
- 雪花算法是在一个项目体系中生成全局唯一ID标识的一种方式,偶然间看到了Python使用雪花算法不尽感叹真的是太便捷了。它生成的唯一ID的规则
- 描述log10() 方法返回以10为基数的x对数,x>0。语法以下是 log10() 方法的语法:import mathmath.lo
- 1.1MyBatis简介 MyBatis 是一个可以自定义SQL、存储过程和高级
- 今儿继续做项目,学习了Django的forms生成前端的代码。forms.pyclass SignupForm(forms.Form): &
- 工作中需要根据某个应用程序具体吃了多少内存来决定执行某些操作,所以需要写个小工具来模拟应用程序使用内存情况,下面是我写的一个Python脚本
- flush()方法刷新内部缓冲区,像标准输入输出的fflush。这类似文件的对象,无操作。Python关闭时自动刷新文件。但是可
- my.ini 是啥玩意?my.ini是MySQL数据库中使用的配置文件,修改这个文件可以达到更新配置的目的。my.ini 在哪放着呢?my.