首頁 > 軟體

python爬蟲之request模組深入講解

2022-03-09 13:00:48

一、概述

在後期滲透測試中,經常會遇到需要向第三方傳送http請求的場景,python中的requests庫可以很好的滿足這一要求,Requests模組是一個用於網路請求的模組,主要用來模擬瀏覽器發請求。其實類似的模組有很多,比如urllib,urllib2,httplib,httplib2,他們基本都提供相似的功能。但是這些模組都複雜而且差不多過時了,requests模組簡單強大高效,使得其在眾多網路請求模組中脫引而出。

二、安裝和基本步驟使用

環境安裝:pip install requests

基本步驟:.

1.匯入模組:import requests
2.指定url:url = "........"
3.基於requests模組傳送請求:res = requests.get(url)
4.獲取響應物件中的資料值:print(res.'...')
5.持久化儲存(不是必須的)

三、http知識複習

(一)八種請求方式:GET、 POST、 HEAD、OPTIONS、 PUT、 DELETE、 TRACE、 CONNECT。

這裡我只詳細介紹getpost

1.GET

用於獲取資源,當採用 GET 方式請求指定資源時, 被存取的資源經伺服器解析後立即返回響應內容。通常以 GET 方式請求特定資源時, 請求中不應該包含請求體,所有需要向被請求資源傳遞的資料都應該通過 URL 向伺服器傳遞。

2. POST

POST 動作:用於提交資料, 當採用 POST 方式向指定位置提交資料時,資料被包含在請求體中,伺服器接收到這些資料後可能會建立新的資源、也可能會更新已有的資源。同時 POST 方式的請求體可以包含非常多的資料,而且格式不限。因此 POST 方式用途較為廣泛,幾乎所有的提交操作都可以使用 POST 方式來完成。

注:雖然用 GET 方式也可以提交資料,但一般不用 GET 方式而是用 POST 方式。在 HTTP協定中,建議 GET 方式只用來獲取資料,而 POST 方式則用來提交資料(而不是獲取資料)。

get方式和post方式區別:

    簡單來說,本質上區別:
    - GET產生 一個 TCP封包
    - POST產生 兩個 TCP封包

    對於GET方式的請求,瀏覽器會把http header和data一併行送出去,伺服器響應200(返回資料);
    而對於POST,瀏覽器先傳送header,伺服器響應100 continue,瀏覽器再傳送data,伺服器響應200 ok(返回資料)。

(二)http常見請求引數

    url:請求url地址
    headers:請求頭
    data:傳送編碼為表單形式的資料
    params:查詢字串

    host:請求web伺服器的域名地址
    User-Agent:HTTP使用者端執行的瀏覽器型別的詳細資訊。通過該頭部資訊,web伺服器可以判斷到當前HTTP請求的使用者端瀏覽器類別。
    Accept:指定使用者端能夠接收的內容型別,內容型別中的先後次序表示使用者端接收的先後次序。
    Accept-Encoding:指定使用者端瀏覽器可以支援的web伺服器返回內容壓縮編碼型別。
    Accept-Language:指定HTTP使用者端瀏覽器用來展示返回資訊所優先選擇的語言
    Connection:表示是否需要持久連線。如果web伺服器端看到這裡的值為“Keep-Alive”,或者看到請求使用的是HTTP 1.1(HTTP 1.1預設進行持久連線),表示連線持久有效,是不會斷開的
    cookie:HTTP請求傳送時,會把儲存在該請求域名下的所有cookie值一起傳送給web伺服器。
    Refer:包含一個URL,使用者從該URL代表的頁面出發存取當前請求的頁面

四、request請求模組的方法使用

舉例說明:爬取我個人網站的資料

import requests  #匯入request模組
    url = "http://42.192.212.170/"  #指定url為我個人的網站
    r = requests.get(url)  #基於request模組給我個人url網站傳送請求
    print (r.url)      #獲取響應包地址
    print (r.status_code) #獲取響應包的狀態碼
    print (r.headers)  #獲取響應包的頭部資訊
    print (len(r.text))  #獲取以文字形式下響應包的長度
    print (r.encoding) #獲取網頁編碼方式
    print (r.cookies)  #獲取響應包的cookie值
    print (r.content)  #以位元組形式返回響應體,會自動解碼成gzip和deflate壓縮

輸出結果:

當然也可以用下面幾種請求方法:

    1.requests.post(“http://httpbin.org/post”)                                        # POST請求
    2.requests.put(“http://httpbin.org/put”)                                          # PUT請求
    3.requests.delete(“http://httpbin.org/delete”)                                    # DELETE請求
    4.requests.head(“http://httpbin.org/get”)                                         # HEAD請求
    5.requests.options(“http://httpbin.org/get” )                                     # OPTIONS請求

requests響應引數說明:

    r.encoding                       #獲取當前的編碼
    r.encoding = 'utf-8'             #設定編碼
    r.text                           #以encoding解析返回內容。字串方式的響應體,會自動根據響應頭部的字元編碼進行解碼。
    r.content                        #以位元組形式(二進位制)返回。位元組方式的響應體,會自動為你解碼 gzip 和 deflate 壓縮。
    r.headers                        #以字典物件儲存伺服器響應頭,但是這個字典比較特殊,字典鍵不區分大小寫,若鍵不存在則返回
    r.status_code                     #響應狀態碼

五,params和payload引數使用說明

舉例說明:

    import requests  #匯入request模組
    r1 = requests.get("http://42.192.212.170/",params={'s':'1'} )   #params字串傳參變數s為1
    print (r1.url)
    payload1 = {'s':'1'} #設定payload參變數s為1
    r2 = requests.get("http://42.192.212.170/",params=payload1) #將params設為payload1
    print (r2.url)
    payload2 = {'key1':"value1",'key2':'value2'} #設定payload參變數key1為value1並且變數key2為value2
    r3 = requests.get("http://42.192.212.170/",params=payload2) #params設為payload2
    print (r3.url)

輸出結果:

總結

到此這篇關於python爬蟲之request模組的文章就介紹到這了,更多相關python爬蟲之request模組內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com