




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
項目五
Requests請求模塊庫任務1網(wǎng)頁請求任務2發(fā)送請求方法任務3復雜網(wǎng)絡請求任務4異常處理任務1網(wǎng)頁請求任務引入雖然發(fā)送請求的模塊庫眾多,但小白經(jīng)過在學習群調(diào)查,發(fā)現(xiàn)有三分之二的人使用Requests庫??梢?,Requests庫肯定有可取之處,但事實還是需要自己去驗證。那么,Requests庫中如何發(fā)送網(wǎng)頁請求?如何獲取響應數(shù)據(jù)?知識準備requests庫的作用是模擬瀏覽器發(fā)送請求。瀏覽器發(fā)送請求流程如圖所示,requests發(fā)送請求流程如圖所示。瀏覽器發(fā)送請求流程圖requests發(fā)送請求流程圖一、標準的HTTP請求在Python中,Requests庫用來發(fā)出標準的HTTP請求,其中,request函數(shù)構(gòu)造一個請求,支持不同方法發(fā)送HTTP請求,其調(diào)用格式如下:requests.request(method,url,**kwargs)參數(shù)說明如下:method:請求方法URL:網(wǎng)頁鏈接,也就是網(wǎng)址**kwargs:用于參數(shù)屬性設(shè)置的字段,指定13個字段來實現(xiàn)非簡單請求的功能,具體參數(shù)說明見表。kwargs參數(shù)說明案例——訪問豆瓣電影網(wǎng)豆瓣電影排行榜網(wǎng)址為/chart,如圖所示,通過Requests函數(shù)發(fā)送HTTP請求,獲取響應數(shù)據(jù)。二、返回響應消息使用request庫中的函數(shù)發(fā)送請求,返回的是包含服務器資源的響應消息Response對象,該對象中包含從服務器返回的所有的相關(guān)資源。根據(jù)返回響應的組成,提供函數(shù)返回指定的響應數(shù)據(jù):查看請求地址:r.url查看響應頭:r.request.headers查看請求頭:r.headers案例——查看響應消息使用GET請求方法訪問未來40天天氣預報網(wǎng)頁,如圖所示,返回響應消息。1.字符串形式網(wǎng)頁本身是由字符串組成,因此,字符串是最常用的格式。在requests中,r.text輸出HTTP響應內(nèi)容的字符串形式,即url對應的頁面內(nèi)容。案例——返回字符串響應數(shù)據(jù)使用GET方法訪問網(wǎng)頁,當請求發(fā)送后,服務器會給瀏覽器返回需要的信息,返回信息包括狀態(tài)行、響應頭部、空行、響應數(shù)據(jù),輸出字符串格式響應數(shù)據(jù)。HTML文檔結(jié)構(gòu)一般包括標記(Html)、頭部(Head)、主體(Body)三部分。標記<html></html>:說明該文件是用超文本標記語言來描述的,它是文件的開頭,而</html>則表示該文件的結(jié)尾,它們是超文本標記語言文件的開始標記和結(jié)尾標記。頭部<head></head>:表示頭部信息的開始和結(jié)尾。頭部中包含的標記是頁面的標題、序言、說明等內(nèi)容,它本身不作為內(nèi)容來顯示,但影響網(wǎng)頁顯示的效果。主體<body></body>:網(wǎng)頁中顯示的實際內(nèi)容均包含在這2個正文標記符之間。正文標記符又稱為實體標記。Response對象屬性函數(shù)可以實現(xiàn)將網(wǎng)頁解析為不同的數(shù)據(jù)格式,方法見表:2.解碼信息urllib庫提供了專門的函數(shù)來對請求的參數(shù)進行轉(zhuǎn)碼,requests庫發(fā)送請求實現(xiàn)獲取頁面,返回Requests響應消息時,能夠自動將響應轉(zhuǎn)碼為Unicode。案例——定義響應數(shù)據(jù)編碼格式使用POST、GET方法訪問網(wǎng)頁,定義字符編碼格式,輸出字符串格式響應數(shù)據(jù)。案例——設(shè)置網(wǎng)頁響應數(shù)據(jù)格式使用POST方法訪問豆瓣電影排行榜網(wǎng)頁,輸出不同格式的響應數(shù)據(jù)。三、JSON格式數(shù)據(jù)JSON(JavaScriptObjectNotation)是一種輕量級的數(shù)據(jù)交換格式,適用于進行數(shù)據(jù)交互的場景,比如網(wǎng)站前臺與后臺之間的數(shù)據(jù)交互。結(jié)構(gòu)化的數(shù)據(jù)一般都是類似JSON格式的字符串,直接解析JSON數(shù)據(jù),提取JSON的關(guān)鍵字段即可。1.創(chuàng)建JSON文件JSON可以將JavaScript對象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后就可以在函數(shù)之間輕松地傳遞這個字符串,或者在異步應用程序中將字符串從Web客戶機傳遞給服務器端程序。2.python編碼為jsonJSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣,在json的編碼過程,是從python類型向json類型的轉(zhuǎn)化過程,具體的轉(zhuǎn)化對照見表:案例——創(chuàng)建json文件JSON(JavaScriptObjectNotation)是一種輕量級的數(shù)據(jù)交換格式,易于人閱讀和編寫。同時也易于機器解析和生成,同時也易于機器解析和生成。3.json解碼為python在json中,json.loads函數(shù)用于將json格式的數(shù)據(jù)轉(zhuǎn)換為字典,即將字符串轉(zhuǎn)化為字典。從json到python的類型轉(zhuǎn)化時,參數(shù)變化對照表如表:案例——json數(shù)據(jù)的編碼與解碼將Python中定義的字典格式數(shù)據(jù)編碼為json數(shù)據(jù),再將json數(shù)據(jù)解碼為字典格式數(shù)據(jù)。任務2發(fā)送請求方法任務引入通過查閱資料,小白了解了網(wǎng)頁發(fā)送請求方法的種類和工作原理。那么,使用Requests如何定義發(fā)送網(wǎng)頁請求的方法?不同的請求方法有什么區(qū)別?知識準備常見的網(wǎng)頁請求的方式分為兩種:GET:最常見的方式,一般用于獲取或者查詢資源信息,也是大多數(shù)網(wǎng)站使用的方式,響應速度快。POST:相比GET方式,多了以表單形式上傳參數(shù)的功能,因此除查詢信息外,還可以修改信息。一、發(fā)送GET請求方法GET方法可以用來傳輸一些可以公開的參數(shù)信息,解析也比較方便,如百度的搜索的關(guān)鍵詞。1.發(fā)送params請求數(shù)據(jù)params參數(shù)用于指定追加在url后面的查詢參數(shù),該參數(shù)是字典或字節(jié)序列格式案例——搜索Autocad圖書網(wǎng)頁石家莊三維書屋文化傳播有限公司網(wǎng)址為/,在站內(nèi)搜索圖書→Autocad,顯示搜索結(jié)果網(wǎng)頁,如圖所示,網(wǎng)址為/md/searchm?c=3&q=Autocad在該網(wǎng)址發(fā)送HTTP請求。2.發(fā)送fields請求數(shù)據(jù)對于GET、HEAD和DELETE請求,在request函數(shù)中定義一個字典類型數(shù)據(jù),作為fields參數(shù)傳入請求,定義的數(shù)據(jù)用來設(shè)置url參數(shù)。案例——發(fā)送帶url參數(shù)的請求使用GET方法發(fā)送請求時,置fields參數(shù)用于添加url參數(shù),二、發(fā)送POST請求發(fā)送post請求方法也叫提交表單,提交的數(shù)據(jù)會附在正文上,一般請求正文的長度是沒有限制的,可以用來提交金融網(wǎng)站一個用戶的敏感信息。1.發(fā)送data請求常見的form表單可以直接使用請求參數(shù)data進行報文提交,一般使用post方法。案例——發(fā)送data提交表單數(shù)據(jù)以post方式發(fā)送請求,訪問/post,通過設(shè)置data和aprams參數(shù),實現(xiàn)增加url和表單資源的效果。2.發(fā)送Json請求json參數(shù)設(shè)置的是Json數(shù)據(jù),提交Json數(shù)據(jù),更新的是數(shù)據(jù)data案例——發(fā)送Json提交表單數(shù)據(jù)以post方式發(fā)送請求,訪問/post,提交Json數(shù)據(jù)。3.發(fā)送body請求在發(fā)起請求時,可以通過定義body參數(shù)并定義headers的Content-Type參數(shù)來發(fā)送一個已經(jīng)過編譯的JSON數(shù)據(jù)。(1)定義headers(2)body參數(shù)body參數(shù)為字典格式的json數(shù)據(jù).案例——發(fā)送body提交表單數(shù)據(jù)發(fā)送數(shù)據(jù){'Python':'sanweishuwu'},利用urllib3庫中的http.request函數(shù)發(fā)起請求。4.設(shè)置fields參數(shù)在urllib3庫中,fields參數(shù)用于指定上傳的數(shù)據(jù),上傳的數(shù)據(jù)可以是字典格式的數(shù)據(jù),也可以是包含字典格式數(shù)據(jù)的文件。案例——發(fā)送field提交表單數(shù)據(jù)對于PUT和POST請求(request),urllib3會自動將字典類型的field參數(shù)編碼成表格類型form,作為請求的請求正文發(fā)送。三、其他請求方法Http的請求方法代表了客戶端想對服務器進行的操作,HTTP請求方法中,GET,HEAD是從服務器獲取信息到本地,PUT,POST,PATCH,DELETE是從本地向服務器提交信息,具體方法見表。在requests中,requests.request中的method的參數(shù)指定的請求方式與requests.get等方法達到的效果相同任務3復雜網(wǎng)絡請求任務引入了解了Requests的基本功能和使用方法后,小白明白了相對于簡單的HTML請求,利用request函數(shù)中的不同參數(shù)進行數(shù)據(jù)傳遞等復雜的網(wǎng)絡請求功能,而且生成的代碼更穩(wěn)定、更易于后期維護。于是摩拳擦掌,開始著手定義參數(shù),要編寫面對不同情況的代碼,需要了解,可設(shè)置的參數(shù)的種類與含義。知識準備簡單請求是默認不發(fā)送Cookie和HTTP等認證信息的請求,復雜網(wǎng)絡請求是發(fā)送請求時,在請求數(shù)據(jù)中添加參數(shù),定義數(shù)據(jù)的類型、長度、編碼等信息,實現(xiàn)服務器認證代理、請求內(nèi)容、定制頭等功能。一、復雜請求頭發(fā)送HTTP時,定制頭部信息,可以隱藏爬蟲信息,模擬瀏覽器的頭部信息。在發(fā)送請求時,一般使用headers參數(shù)定義請求頭。案例——發(fā)送定制請求頭信息使用POST請求方法訪問測試網(wǎng)頁,定義請求頭參數(shù),修改瀏覽器、添加請求頭來源、定義響應的數(shù)據(jù)格式與編碼格式。二、上傳文件客戶端瀏覽器向服務端發(fā)送HTTP請求時有一類特殊的請求,就是上傳文件。發(fā)送其他值時,可能是以字節(jié)為單位的,上傳文件時,可能是以KB或MB為單位的,因為在發(fā)送的文件尺寸通常比較大,所以上傳的文件內(nèi)容會使用multipart/form-data格式進行編碼。下面介紹上傳文件步驟:使用fields關(guān)鍵字參數(shù)指定一個描述上傳文件的HTTP請求頭字段通過元組指定相關(guān)屬性,如,上傳文件名,文件類型等。案例——上傳二進制數(shù)據(jù)發(fā)送POST請求,通過定義field參數(shù),上傳圖所示的文件。三、cookies驗證為了獲取登錄之后的頁面,必須發(fā)送帶有cookies的請求,此時為了確保賬號安全應該盡量降低數(shù)據(jù)采集速度。案例——輸出cookies信息登錄百度網(wǎng)站,輸出字符串格式與字典格式的cookies信息。四、會話保持會話(session)保持是指在負載均衡器上的一種機制,可以識別客戶端與服務器之間交互過程的關(guān)連性,在作負載均衡的同時還保證一系列相關(guān)連的訪問請求都會分配到一臺機器上。比如使用session成功的登錄了某個網(wǎng)站,則在再次使用該session對象登陸該網(wǎng)站的其他網(wǎng)頁都會默認使用該session之前使用的cookie等參數(shù)。案例——通過session對象和requests發(fā)送get請求session對象代表一次用戶會話:從客戶端瀏覽器連接服務器開始,到客戶端瀏覽器與服務器斷開。通過session對象發(fā)送對象關(guān)閉后保存cookie,requests發(fā)送get請求后,不保存cookie。任務4異常處理任務引入小白在進行發(fā)送請求時,因為不同的原因,經(jīng)常會遇到警告信息。有些是語法錯誤,可以很快進行修改,還有一些是運行失敗異常,需要根據(jù)具體原因進行修改,但警告信息中不會清晰的顯示錯誤原因。為了快速得到正確的程序,使用函數(shù)分類這些異常。那么?如何進行異常處理?Python包含哪些異常?知識準備異常是一個事件,該事件會在程序執(zhí)行過程中發(fā)生,影響了程序的正常執(zhí)行?!闱闆r下,在Python無法正常處理程序時就會發(fā)生一個異常。異常是Python對象,表示一個錯誤。當Python腳本發(fā)生異常時需要捕獲處理它,否則程序會終止執(zhí)行。捕捉異常一般使用try/except語句與異常處理模塊(urllib.error模塊、request.exceptions模塊),保證程序不會終止。一、try/except語句try/except這種結(jié)構(gòu)在程序調(diào)試時很有用,因此在這里我們簡單介紹一下這種分支結(jié)構(gòu).(1)try-excep結(jié)構(gòu)(2)try-excep-else結(jié)構(gòu)(3)嵌套循環(huán)二、urllib異常處理模塊urllib的error模塊定義了由request模塊產(chǎn)生的異常,如果運行出現(xiàn)問題,request模塊顯示error模塊中定義的異常(1)URLErrorURLError表示打開一個不存在的頁面,由request模塊產(chǎn)生的異常都可以通過捕獲這個類來處理。(2)HTTPErrorHTTPError是URLError的子類,專門用來處理HTTP請求錯誤,比如認證請求失敗等,HTTPError有三個屬性。code:返回HTTPStatusCode,即狀態(tài)碼,比如404網(wǎng)頁不存在,500服務器內(nèi)部錯誤等等。reason:返回錯誤的原因。headers:返回頭信息RequestHeaders。案例——處理URLError異常URLError是HTTPError的父類,所以可以先選擇捕獲子類的錯誤,再去捕獲父類的錯誤;先捕獲HTTPError,再獲取它的錯誤狀態(tài)碼、原因、Headers等詳細信息。案例——處理urllib異常如果是非HTTPError,再捕獲URLError異常,輸出錯誤原因,最后用else來處理正常的邏輯。三、urllib3異常處理模塊網(wǎng)絡請求方式通常分為兩種,分別是HTTP請求和HTTPS請求,HTTPS是一種在HTTP的基礎(chǔ)上加了SSL/TLS層(安全套接層)的安全的超文本傳輸協(xié)議。默認情況下,urllib3不進行HTTPS請求驗證,即不認證服務器的證書。但系統(tǒng)強制驗證https的安全證書,如果沒有通過是不能通過請求的。在urllib3中,disable_warnings函數(shù)用來禁用各種警告。發(fā)送請求時雖然添加忽略驗證的參數(shù),但是依然會給出醒目的Warning:InsecureRequestWarning。若要在HTTPS請求之前進行服務器驗證,還需要在客戶端安裝根證書。四、request異常處理模塊1.常見異常錯誤在用Python的requests模塊進行爬蟲時,遇到網(wǎng)絡的各種變化,可能會導致請求過程發(fā)生各種未知的錯誤導致程序中斷,request.exceptions模塊定義各種異常錯誤,見表。案例——處理request響應錯誤2.證書驗證錯誤任何網(wǎng)站都是需要安裝SSL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)核心機密保護合同模板
- 市場營銷合作合同模板:品牌推廣專用
- 數(shù)據(jù)外包服務合同轉(zhuǎn)讓合同
- 標準勞動合同解除樣本
- 加盟連鎖店經(jīng)營合同樣本
- 合同約定催款函格式專業(yè)版
- 建筑物拆除的施工安全管理考核試卷
- 機床制造中的人力資源管理策略考核試卷
- 農(nóng)業(yè)科學中的農(nóng)村居民收入與消費考核試卷
- 安全網(wǎng)絡數(shù)據(jù)安全審計流程自動化考核試卷
- 2025復工復產(chǎn)安全教育培訓
- 2024年叉車司機車輛基本操作知識考試題庫及答案(共70題)
- 工業(yè)統(tǒng)計知識培訓
- 2025年臨沂科技職業(yè)學院高職單招語文2018-2024歷年參考題庫頻考點含答案解析
- 保密協(xié)議范本
- 2025年臨床醫(yī)師定期考核必考復習題庫及答案(1080題)
- 電梯維保知識培訓課件
- CNAS-R02:2023公正性和保密規(guī)則
- 2024-2030年中國骨傳導植入式助聽器和耳機行業(yè)應用態(tài)勢與需求前景預測報告
- 現(xiàn)場物資安全管理
- 2024解析:第二十章電與磁-講核心(解析版)
評論
0/150
提交評論