(一)準備:Requests庫基礎知識

一、安裝

Windows平臺:運行cmd,執行pip install requests

測試(以百度爲例):

import requests
r = requests.get("http://www.baidu.com")
print(r.status_code)

二、Requests庫的7個主要方法

    1、requests.request()    構造一個請求,支撐以下各方法的基礎方法

        
requests.request(method, url, **kwargs)
method請求方式,對應get/put/post等7種
url擬獲取頁面的url鏈接
**kwargs控制訪問的參數,共13個

    2、requests.get()           獲取HTML網頁的主要方法,對應於HTTP的GET

        (1)r = requests.get(url)    

                其中r返回一個包含服務器資源的Response對象(Response對象包含服務器返回的所有信息,也包含請求的Request信息);get()方法構造一個向服務器請求資源的Request對象

                

response屬性
r.status_codeHTTP請求的返回狀態,200表示連接成功,404表示失敗
r.textHTTP響應內容的字符串形式,即,url對應的頁面內容
r.encoding從HTTP header中猜測的響應內容編碼方式
r.apparent_encoding從內容中分析出的響應內容編碼方式(備選編碼方式)
r.contentHTTP響應內容的二進制形式
備註r.encoding:如果header中不存在charset,則認爲編碼爲ISO‐8859‐1 r.text根據r.encoding顯示網頁內容
r.apparent_encoding:根據網頁內容分析出的編碼方式 可以看作是r.encoding的備選

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

                url : 擬獲取頁面的url鏈接

                params : url中的額外參數,字典或字節流格式,可選 

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

        (3)get()方法的定義

                 

    3、requests.head()        獲取HTML網頁頭信息的方法,對應於HTTP的HEAD

                 

    4、requests.post()         向HTML網頁提交POST請求的方法,對應於HTTP的POST

            向URL POST一個字典 自動編碼爲form(表單),向URL POST一個字符串 自動編碼爲data,如圖:

            

    5、requests.put()          向HTML網頁提交PUT請求的方法,對應於HTTP的PUT

    6、requests.patch()       向HTML網頁提交局部修改請求,對應於HTTP的PATCH

    7、requests.delete()      向HTML頁面提交刪除請求,對應於HTTP的DELETE

三、爬蟲代碼的通用框架

    1、requests庫異常

requests.ConnectionError網絡連接錯誤異常,如DNS查詢失敗、拒絕連接等
requests.HTTPErrorHTTP錯誤異常
requests.URLRequiredURL缺失異常
requests.TooManyRedirects超過最大重定向次數,產生重定向異常
requests.ConnectTimeout連接遠程服務器超時異常
requests.Timeout請求URL超時,產生超時異常

    2、response的異常

r.raise_for_status()如果不是200,產生異常 requests.HTTPError
                                                                    r = requests.get(url)
r.raise_for_status()在方法內部判斷r.status_code是否等於200,不需要增加額外的if語句,該語句便於利用try‐except進行異常處理

    3、爬取網頁的通用代碼框架

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協議

HTTP,Hypertext Transfer Protocol,超文本傳輸協議
        HTTP是一個基於“請求與響應”模式的、無狀態的應用層協議 HTTP協議採用URL作爲定位網絡資源的標識,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協議存取資源的Internet路徑,一個URL對應一個數據資源

HTTP協議對資源的操作
GET請求獲取URL位置的資源
HEAD請求獲取URL位置資源的響應消息報告,即獲得該資源的頭部信息
POST請求向URL位置的資源後附加新的數據
PUT請求向URL位置存儲一個資源,覆蓋原URL位置的資源
PATCH請求局部更新URL位置的資源,即改變該處資源的部分內容
DELETE請求刪除URL位置存儲的資源
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章