python爬蟲之request模塊深入講解
一、概述
在后期滲透測試中,經(jīng)常會遇到需要向第三方發(fā)送http請求的場景,python中的requests庫可以很好的滿足這一要求,Requests模塊是一個用于網(wǎng)絡(luò)請求的模塊,主要用來模擬瀏覽器發(fā)請求。其實類似的模塊有很多,比如urllib,urllib2,httplib,httplib2,他們基本都提供相似的功能。但是這些模塊都復(fù)雜而且差不多過時了,requests模塊簡單強(qiáng)大高效,使得其在眾多網(wǎng)絡(luò)請求模塊中脫引而出。
二、安裝和基本步驟使用
環(huán)境安裝:pip install requests
基本步驟:.
1.導(dǎo)入模塊:import requests
2.指定url:url = "........"
3.基于requests模塊發(fā)送請求:res = requests.get(url)
4.獲取響應(yīng)對象中的數(shù)據(jù)值:print(res.'...')
5.持久化存儲(不是必須的)
三、http知識復(fù)習(xí)
(一)八種請求方式:GET、 POST、 HEAD、OPTIONS、 PUT、 DELETE、 TRACE、 CONNECT。
這里我只詳細(xì)介紹get和post:
1.GET
用于獲取資源,當(dāng)采用 GET 方式請求指定資源時, 被訪問的資源經(jīng)服務(wù)器解析后立即返回響應(yīng)內(nèi)容。通常以 GET 方式請求特定資源時, 請求中不應(yīng)該包含請求體,所有需要向被請求資源傳遞的數(shù)據(jù)都應(yīng)該通過 URL 向服務(wù)器傳遞。
2. POST
POST 動作:用于提交數(shù)據(jù), 當(dāng)采用 POST 方式向指定位置提交數(shù)據(jù)時,數(shù)據(jù)被包含在請求體中,服務(wù)器接收到這些數(shù)據(jù)后可能會建立新的資源、也可能會更新已有的資源。同時 POST 方式的請求體可以包含非常多的數(shù)據(jù),而且格式不限。因此 POST 方式用途較為廣泛,幾乎所有的提交操作都可以使用 POST 方式來完成。
注:雖然用 GET 方式也可以提交數(shù)據(jù),但一般不用 GET 方式而是用 POST 方式。在 HTTP協(xié)議中,建議 GET 方式只用來獲取數(shù)據(jù),而 POST 方式則用來提交數(shù)據(jù)(而不是獲取數(shù)據(jù))。
get方式和post方式區(qū)別:
簡單來說,本質(zhì)上區(qū)別:
- GET產(chǎn)生 一個 TCP數(shù)據(jù)包
- POST產(chǎn)生 兩個 TCP數(shù)據(jù)包
對于GET方式的請求,瀏覽器會把http header和data一并發(fā)送出去,服務(wù)器響應(yīng)200(返回數(shù)據(jù));
而對于POST,瀏覽器先發(fā)送header,服務(wù)器響應(yīng)100 continue,瀏覽器再發(fā)送data,服務(wù)器響應(yīng)200 ok(返回數(shù)據(jù))。
(二)http常見請求參數(shù)
url:請求url地址
headers:請求頭
data:發(fā)送編碼為表單形式的數(shù)據(jù)
params:查詢字符串
host:請求web服務(wù)器的域名地址
User-Agent:HTTP客戶端運(yùn)行的瀏覽器類型的詳細(xì)信息。通過該頭部信息,web服務(wù)器可以判斷到當(dāng)前HTTP請求的客戶端瀏覽器類別。
Accept:指定客戶端能夠接收的內(nèi)容類型,內(nèi)容類型中的先后次序表示客戶端接收的先后次序。
Accept-Encoding:指定客戶端瀏覽器可以支持的web服務(wù)器返回內(nèi)容壓縮編碼類型。
Accept-Language:指定HTTP客戶端瀏覽器用來展示返回信息所優(yōu)先選擇的語言
Connection:表示是否需要持久連接。如果web服務(wù)器端看到這里的值為“Keep-Alive”,或者看到請求使用的是HTTP 1.1(HTTP 1.1默認(rèn)進(jìn)行持久連接),表示連接持久有效,是不會斷開的
cookie:HTTP請求發(fā)送時,會把保存在該請求域名下的所有cookie值一起發(fā)送給web服務(wù)器。
Refer:包含一個URL,用戶從該URL代表的頁面出發(fā)訪問當(dāng)前請求的頁面
四、request請求模塊的方法使用
舉例說明:爬取我個人網(wǎng)站的數(shù)據(jù)
import requests #導(dǎo)入request模塊 url = "http://42.192.212.170/" #指定url為我個人的網(wǎng)站 r = requests.get(url) #基于request模塊給我個人url網(wǎng)站發(fā)送請求 print (r.url) #獲取響應(yīng)包地址 print (r.status_code) #獲取響應(yīng)包的狀態(tài)碼 print (r.headers) #獲取響應(yīng)包的頭部信息 print (len(r.text)) #獲取以文本形式下響應(yīng)包的長度 print (r.encoding) #獲取網(wǎng)頁編碼方式 print (r.cookies) #獲取響應(yīng)包的cookie值 print (r.content) #以字節(jié)形式返回響應(yīng)體,會自動解碼成gzip和deflate壓縮
輸出結(jié)果:
當(dāng)然也可以用下面幾種請求方法:
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響應(yīng)參數(shù)說明:
r.encoding #獲取當(dāng)前的編碼 r.encoding = 'utf-8' #設(shè)置編碼 r.text #以encoding解析返回內(nèi)容。字符串方式的響應(yīng)體,會自動根據(jù)響應(yīng)頭部的字符編碼進(jìn)行解碼。 r.content #以字節(jié)形式(二進(jìn)制)返回。字節(jié)方式的響應(yīng)體,會自動為你解碼 gzip 和 deflate 壓縮。 r.headers #以字典對象存儲服務(wù)器響應(yīng)頭,但是這個字典比較特殊,字典鍵不區(qū)分大小寫,若鍵不存在則返回 r.status_code #響應(yīng)狀態(tài)碼
五,params和payload參數(shù)使用說明
舉例說明:
import requests #導(dǎo)入request模塊 r1 = requests.get("http://42.192.212.170/",params={'s':'1'} ) #params字符串傳參變量s為1 print (r1.url) payload1 = {'s':'1'} #設(shè)置payload參變量s為1 r2 = requests.get("http://42.192.212.170/",params=payload1) #將params設(shè)為payload1 print (r2.url) payload2 = {'key1':"value1",'key2':'value2'} #設(shè)置payload參變量key1為value1并且變量key2為value2 r3 = requests.get("http://42.192.212.170/",params=payload2) #params設(shè)為payload2 print (r3.url)
輸出結(jié)果:
總結(jié)
到此這篇關(guān)于python爬蟲之request模塊的文章就介紹到這了,更多相關(guān)python爬蟲之request模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python小程序基于Jupyter實現(xiàn)天氣查詢的方法
這篇文章主要介紹了python小程序基于Jupyter實現(xiàn)天氣查詢的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03pip install python 快速安裝模塊的教程圖解
這篇文章主要介紹了pip install python 如何快速安裝模塊,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10Django Sitemap 站點地圖的實現(xiàn)方法
這篇文章主要介紹了Django Sitemap 站點地圖的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04MNIST數(shù)據(jù)集轉(zhuǎn)化為二維圖片的實現(xiàn)示例
這篇文章主要介紹了MNIST數(shù)據(jù)集轉(zhuǎn)化為二維圖片的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01