對python3 urllib包與http包的使用詳解
urllib包和http包都是面向HTTP協(xié)議的。其中urllib主要用于處理 URL,使用urllib操作URL可以像使用和打開本地文件一樣地操作。而 http包則實現(xiàn)了對 HTTP協(xié)議的封裝,是urllib.request模塊的底層。
1.urllib包簡介
2. http 包簡介
1.urllib包簡介
urllib包主要模塊有:
1.urllib.request -----用于打開 URL網(wǎng)址;
2.urllib.error ---------定義了常見的urllib.request會引發(fā)的異常;
3.urllib.parse---------用于解析 URL;
具體方法:
urllib.request.urlopen( url,data,proxies ) :用于打開 url
參數(shù)如下:
url:要進行操作的 URL地址
data:可選項。向URL 傳遞的數(shù)據(jù)。
proxies:可選項。使用的代理地址
import urllib.request
url = 'http://www.baidu.com' #網(wǎng)頁為百度首頁
respone = urllib.request.urlopen(url) #打開url地址,并返回一個 HTTPRespone實例
html = respone.read().decode('utf-8') #調(diào)用實例的 read()方法,并用 utf-8進行解碼處理。就得出完整的百度的HTML文件
print(html)
部分打印結(jié)果:
<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 rel="external nofollow" >
urllib.request.urlretrieve(url,filename,reporthook,data) :用于將 URL的HTML文件下載并保存為本地文件
參數(shù)如下:
url:要下載的網(wǎng)頁
filename:保存在主機的路徑,可選項。
reporthook:一個回調(diào)函數(shù),可選項。
data:發(fā)送的數(shù)據(jù),一般用于 post,可選項。
特別:關(guān)于urlretrieve()的回調(diào)函數(shù)reporthook:可以用來顯示下載的進度,幾乎已經(jīng)封裝好
import urllib.request def callbackfunc(blocknum, blocksize, totalsize): #這三個參數(shù)是由 urlretrieve自動賦值的 '''回調(diào)函數(shù) @blocknum: 已經(jīng)下載的數(shù)據(jù)塊 @blocksize: 數(shù)據(jù)塊的大小 @totalsize: 遠(yuǎn)程文件的大小 ''' percent = 100.0 * blocknum * blocksize / totalsize if percent > 100: percent = 100 print( "%.2f%%"% percent) #保留兩位小數(shù) url = 'http://www.sina.com' local = 'd:\\sina.html' #下載的html文件保存在 d盤的sina.html里 urllib.request.urlretrieve(url,local,callbackfunc) #沒下載完一個數(shù)據(jù)塊,就會執(zhí)行回調(diào)函數(shù)一次
執(zhí)行結(jié)果:
//只顯示局部 0.00% 1.38% 2.76% 4.13% 5.51% 6.89%
2. http包簡介
http包提供了 HTTP協(xié)議的一些功能,主要模塊有:
http.client --- 底層的 HTTP 協(xié)議的一些功能,可以為 urllib.request 模塊所用
http.server --- 提供了基于 socketserver模塊的基本 HTTP服務(wù)器類
http.cookies --- cookies 的管理工具
http.client :
HttpClient不是一個瀏覽器。它是一個客戶端的HTTP通信實現(xiàn)庫。HttpClient的目標(biāo)是發(fā)送和接收HTTP報文。
兩個主要類(用于客戶端):
HTTPConnection :基于HTTP協(xié)議的客戶端,指定 URL(網(wǎng)址) 后,可以 發(fā)送請求報文 和 接收響應(yīng)報文
HTTPRespone :基于 HTTP 協(xié)議的服務(wù)端回應(yīng)。一旦用 HTTPConnection 成功連接,可以調(diào)用相關(guān)方法返回該實例(HTTPRequest實例)。
(1)HTTPConnection 的方法:
構(gòu)造方法: HTTPConnection( host,port,[timeout] ) 返回一個HTTPConnection 實例
host:表示主機域名或 ip 地址
port:表示端口
timeout:阻塞操作將會在給定時間后超時??蛇x項
發(fā)送請求報文方法:HTTPConnection.request( method,url,body =None,headers = {} )
method:發(fā)送的操作,一般為 GET 或者 POST
url :進行操作的 url
body :所發(fā)送的數(shù)據(jù)
headers:發(fā)送的 HTTP頭部,是一個字典類型
獲取響應(yīng)報文方法:HTTPConnection.getrespone( )
關(guān)閉與服務(wù)器的連接: HTTPConne.close()
發(fā)送一個頭部:HTTPConnection.putheader( header,args[ ] ) #頭部以一個字典方式發(fā)送
發(fā)送一個空白行到服務(wù)器,標(biāo)志頭部Header的結(jié)束:HTTPConnection.endheaders( )
發(fā)送數(shù)據(jù)到服務(wù)器:HTTPConnection.send( data ) ,應(yīng)該在endheaders()之后 和 getrespone()之前調(diào)用。
(2)HTTPRespone:
HTTPRespone對象:一旦用 HTTPConnection 成功連接,可以調(diào)用HTTPConnection.getrespone()返回該實例(HTTPRequest實例)。
HTTPRespone.getheader(name) :返回頭部中的 name 字段對應(yīng)的值
HTTPRespone.getheaders( ) :以元組的方式返回整個頭部的信息
HTTPRespone.read() :返回響應(yīng)報文中的body部分,也即正文部分
HTTPRespone.status #返回狀態(tài)碼
HTTPRespone.version #返回 HTTP協(xié)議版本
http 包應(yīng)用實例 。
from http.client import HTTPConnection
con = HTTPConnection('www.baidu.com',80)
con.request('GET','/') #發(fā)送請求報文
res = con.getresponse() #獲取響應(yīng)報文對象
print(res.status) #200 (表示狀態(tài)碼)
print(res.reason) #OK (表示狀態(tài)碼對應(yīng)的意義)
print(res.read().decode('utf-8')) #打印www.baidu.com的html
以上這篇對python3 urllib包與http包的使用詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
使用Python解決常見格式圖像讀取nii,dicom,mhd
這篇文章主要介紹了使用Python解決常見格式圖像讀取nii,dicom,mhd,下文具體操作過程需要的小伙伴可以參考一下2022-04-04
Python?flask?sqlalchemy的簡單使用及常用操作
這篇文章主要介紹了Python?flask?sqlalchemy的簡單使用及常用操作,在python中,常用的ORM工具就是sqlalchemy了。下面就以一個簡單的flask例子來說明吧,需要的小伙伴可以參考一下2022-08-08
僅用50行代碼實現(xiàn)一個Python編寫的計算器的教程
這篇文章主要介紹了僅用50行代碼實現(xiàn)一個Python編寫的計算器的教程,主要用到了PlyPlus庫使得核心代碼十分簡單,需要的朋友可以參考下2015-04-04
Python學(xué)習(xí)之魔法函數(shù)(filter,map,reduce)詳解
這篇文章我們將來學(xué)習(xí)一下,Python中的三個高級函數(shù):filter()、map()、reduce(),這三個函數(shù)也被稱為魔法函數(shù),感興趣的小伙伴可以了解一下2022-04-04
Python+OpenCV圖像處理——實現(xiàn)直線檢測
這篇文章主要介紹了Python+OpenCV如何實現(xiàn)直線檢測,幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下2020-10-10

