The?Website?is?the?API
Requests 庫的安裝
windows環(huán)境下:
以管理員身份運行”cmd茧球,執(zhí)行 pip install requests
安裝完成測試:
Requests庫的七個方法:
方法? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 說明
requests.request()? ? ? ? ? ? ? ? ? ? 構(gòu)造一個請求薄湿,支撐以下各方法的基礎(chǔ)方法
requests.get()? ? ? ? ? ? ? ? ? ? ? ? ? ?獲取HTML網(wǎng)頁的主要方法是尔,對應(yīng)于HTTP的GET
requests.head()? ? ? ? ? ? ? ? ? ? ? ? ?獲取HTML網(wǎng)頁頭的信息方法原在,對應(yīng)于HTTP的HEAD
requests.post()? ? ? ? ? ? ? ? ? ? ? ? ? 向HTML網(wǎng)頁提交POST請求的方法咱揍,對應(yīng)于HTML的POST
requests.put()? ? ? ? ? ? ? ? ? ? ? ? ? ? 向HTML網(wǎng)頁提交PUT請求方法钥勋,對應(yīng)于HTML的PUT
requests.patch()? ? ? ? ? ? ? ? ? ? ? ? 向HTML網(wǎng)頁提交局部修改請求對應(yīng)于HTML的PATCH
requests.delete()? ? ? ? ? ? ? ? ? ? ? ? 向HTML網(wǎng)頁提交刪除請求對應(yīng)于HTML的DELETE
requests.get()
requests.get(url, params=None, **kwargs)
??url : 擬獲取頁面的url鏈接
??params : url中的額外參數(shù)惭适,字典或字節(jié)流格式,可選
? **kwargs: 12個控制訪問的
源代碼:
Requests庫的兩個重要對象:
Response對象包含爬蟲返回的內(nèi)容
Response對象示例:
Response對象包含服務(wù)器返回的所有信息递递,也包含請求的Requests信息
Response? 對象的屬性
屬性? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?說明
r.status_code ????????????????????HTTP請求的返回狀態(tài)喷橙,200表示連接成功,404表示失敗
r.text HTTP????????????????????????響應(yīng)內(nèi)容的字符串形式登舞,即贰逾,url對應(yīng)的頁面內(nèi)容
r.encoding ????????????????????????從HTTP header中猜測的響應(yīng)內(nèi)容編碼方式
r.apparent_encoding? ? ? ? ?從內(nèi)容中分析出的響應(yīng)內(nèi)容編碼方式(備選編碼方式)
r.content HTTP? ? ? ? ? ? ? ? ? 響應(yīng)內(nèi)容的二進制
理解Response的編碼:
r.encoding????????????????????? 從HTTP header中猜測的響應(yīng)內(nèi)容編碼方式
r.apparent_encoding ????從內(nèi)容中分析出的響應(yīng)內(nèi)容編碼方式(備選編碼方式)
r.encoding? ? ? ? ? ? ? ? ? ? 如果header中不存在charset,則認為編碼為ISO‐8859‐1
r.text????????????????????????????根據(jù)r.encoding顯示網(wǎng)頁內(nèi)容
r.apparent_encoding? ? ? ?根據(jù)網(wǎng)頁內(nèi)容分析出的編碼方式
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?可以看作是r.encoding的備選
理解requests 庫的異常:
網(wǎng)絡(luò)連接有風(fēng)險逊躁,異常處理很重要
異常? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?說明
requests.ConnectionError? ? ?網(wǎng)絡(luò)連接錯誤異常似踱,如DNS查詢失敗隅熙、拒絕連接requests.HTTPError HTTP錯誤異常
requests.URLRequired? ? ? ? ?URL缺失異常
equests.TooManyRedirects? ?超過最大重定向次數(shù)稽煤,產(chǎn)生重定向異常
requests.ConnectTimeout? ? ? 連接遠程服務(wù)器超時異常
requests.Timeout? ? ? ? ? ? ? ? ? ? 請求URL超時,產(chǎn)生超時
理解Response 對象的異常
r.raise_for_status() ????????????????如果不是200產(chǎn)生異常 requests.HTTPError
r.raise_for_status()在方法內(nèi)部判斷r.status_code是否等于200囚戚,不需要增加額外的if語句酵熙,該語句便于利用try‐except進行異常處理
爬取網(wǎng)頁的通用代碼框架
HTTP協(xié)議
HTTP 協(xié)議 (Hypertext Transfer Protocol)? ????超文本傳輸協(xié)議
HTTP是一個基于“請求與響應(yīng)”模式的、無狀態(tài)的應(yīng)用層協(xié)議
HTTP協(xié)議采用URL作為定位網(wǎng)絡(luò)資源的標(biāo)識驰坊,URL格式如下:
? ??????????????http://host[:port][path]
????host: 合法的Internet主機域名或IP地址
????port: 端口號匾二,缺省端口為80
????path: 請求資源的路徑
HTTP URL實例:
????http://www.bit.edu.cn
????http://220.181.111.188/duty
HTTP URL:
URL是通過HTTP協(xié)議存取資源的Internet路徑,一個URL對應(yīng)一個數(shù)據(jù)資源
HTTP協(xié)議對資源的操作:?????
方法? ? ? ? ? ? ? ? ? ? ? ?說明
GET? ? ? ? ? ? ? ? ? ? ? ?請求獲取URL位置的資源
HEAD? ? ? ? ? ? ? ? ? ? 請求獲取URL位置資源的響應(yīng)消息報告拳芙,即獲得該資源的頭部信息
POST? ? ? ? ? ? ? ? ? ? 請求向URL位置的資源后附加新的數(shù)據(jù)
PUT? ? ? ? ? ? ? ? ? ? ? ?請求向URL位置存儲一個資源察藐,覆蓋原URL位置的資源
PATCH? ? ? ? ? ? ? ? ? ?請求局部更新URL位置的資源,即改變該處資源的部分內(nèi)容
DELETE???????????????? 請求刪除URL位置存儲的
HTTP協(xié)議對資源的操作:
通過URL和命令管理資源舟扎,操作獨立無狀態(tài)分飞,網(wǎng)絡(luò)通道及服務(wù)器成為了黑盒子
理解 PATCH和PUT的區(qū)別:
假設(shè)URL位置有一組數(shù)據(jù)UserInfo包括UserIDUserName等20個字段
需求:用戶修改了UserName,其他不變
? 采用PATCH睹限,僅向URL提交UserName的局部更新請求
? 采用PUT譬猫,必須將所有20個字段一并提交到URL讯檐,未提交字段被刪除
PATCH的最主要好處:節(jié)省網(wǎng)絡(luò)帶寬
HTTP 協(xié)議? Requests庫
HTTP協(xié)議方法???????????? Requests庫方法 ????????????功能一致性
GET???????????????????????????????? requests.get() ????????????????????一致
HEAD ????????????????????????????requests.head()? ? ? ? ? ? ? ? ? ?一致
POST???????????????????????????? requests.post()? ? ? ? ? ? ? ? ? ? ?一致
PUT? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? requests.put()? ? ? ? ? ? ? ? ? ? ? 一致
PATCH? ? ? ? ? ? ? ? ? ? ? ? ? requests.patch()? ? ? ? ? ? ? ? ? ? 一致
DELETE ????????????????????????requests.delete() ????????????????一致
requests庫的 heade() 方法