1. 程式人生 > >python爬蟲學習筆記二:Requests庫詳解及HTTP協議

python爬蟲學習筆記二:Requests庫詳解及HTTP協議

Requests庫的安裝:https://mp.csdn.net/postedit/83715574

r=requests.get(url,params=None,**kwargs)

這個r是Response物件

url :擬獲取頁面的url連結

params:url中的額外引數,字典或位元組流格式,可選

**kwargs:12個控制訪問的引數

Requests庫的2個重要物件

                                             Requests庫的7個主要方法

 
方法 說明
requests.request() 構造一個請求,支撐一下各方法的基礎方法
requests.get() 獲取HTML網頁的主要方法,對應於HTTP的GET
requests.head() 獲取HTML網頁頭資訊的方法,對應於HTTP的HEAD
requests.post() 向HTML網頁提交POST請求的方法,對應於HTTP的POST
requests.put() 向HTML網頁提交PUT請求的方法,對應於HTTP的PUT
requests.patch() 向HTML網頁提交區域性修改請求,對應於HTTP的PATCH
requests.delete() 向HTML頁面提交刪除請求,對應於HTTP的DELETE

 

Response物件包含爬蟲返回的內容

Response物件屬性:

r.status_code   HTTP請求的返回狀態,200表示連結成功,404表示失敗,返回不為200都是失敗的

r.text                 HTTP響應內容的字串形式,即url對應的頁面內容

r.encoding         從HTTP header中猜測的響應內容編碼方式

r.apparent_encoding  從內容中分析出響應內容編碼方式(備選編碼方式)

r.content            HTTP響應內容的二進位制形式

                                                        理解Requests庫的異常

異常 說明
requests.ConnectionError 網路連線錯誤異常,如DNS查詢失敗、拒絕連線等
requests.HTTPError HTTP錯誤異常
requests.URLRequired URL缺失異常
requests.TooManyRedirects 超過最大重定向次數,產生重定向異常
requests.ConnectTimeout 連線遠端伺服器超時異常
requests.Timeout 請求URL超時,產生超時異常

理解Response物件非常重要。

理解Requests庫的異常,通用程式碼框架:

r.raise_for_status()         如果不是200,產生異常requests.HTTPError ,用這個結合try catch可以丟擲異常,寫在try裡面,判斷網站的響應狀態,如果未響應丟擲異常,執行catch裡面的方法。

import requests
def getHTMLText(url)
    try:
        r=requests.get(url,timeout=30)
        r.raise_for_status()    #如果狀態不是200,引發HTTPError異常
        r.encoding=r.apparent_encoding
        return r.text
    except:
        return "產生異常"
if _name_=="_main_":
    url="http://www.baidu.com"
    print(getHTMLText(url))
        

 

HTTP協議

url格式:http://host[:port][path]

port:埠號,預設埠為80

path:請求資源的路徑

url是通過HTTP協議存取資源的Internet路徑,一個URL對應一個數據資源

HTTP協議對資源的操作

方法 說明

GET 請求獲取URL位置的資源

HEAD 請求獲取URL位置資源的響應訊息報告,即獲取該資源的頭部資訊

POST 請求向URL位置的資源後附加新的資料

PUT 請求向URL位置儲存一個資源,覆蓋原URL位置的資源

PATCH 請求區域性更新URL位置的資源,即改變該處資源的部分內容

DELETE 請求刪除URL位置儲存的資源

理解PATCH和PUT的區別!

head和get是最常用到的!