Python學習筆記(requests模組與實戰)
基礎的一些python語法和小實驗我都做完了,但是python指令碼對於日常的工作還是非常有用的,所以我打算在利用靶機實驗學習的同時也加強一下程式語言的學習。
今天先來學習一個python模組:requests。requests模組是一個http庫,通俗的來說,你可以使用requests模組來完成瀏覽器的任何操作。它會自動實現持久連線keep-alive。比如支援http連線保持、支援使用cookie保持會話,支援檔案上傳,支援自動響應內容的編碼,支援國際化的 URL 和 POST 資料自動編碼等。
Requests庫中有7個主要的函式,分別是request() 、get() 、head() 、post() 、put() 、patch() 、delete() 。這七個函式中request()函式是其餘六個函式的基礎函式,其餘六個函式的實現都是通過呼叫該函式實現的。
方法 | 說明 |
---|---|
requests.request() | 構造一個請求,支撐一下方法的基礎方法 |
requests.get() | 獲取HTML網頁的主要方法,對應於HTTP的GET(請求URL位置的資源) |
requests.head() | 獲取HTML網頁頭資訊的方法,對應於HTTP的HEAD(請求URL位置的資源的頭部資訊) |
requests.post() | 向HTML網頁提交POST請求的方法,對應於HTTP的POST(請求向URL位置的資源附加新的資料) |
requests.put() | 向HTML網頁提交PUT請求的方法,對應於HTTP的PUT(請求向URL位置儲存一個資源,覆蓋原來URL位置的資源) |
requests.patch() | 向HTML網頁提交區域性修改的請求,對應於HTTP的PATCH(請求區域性更新URL位置的資源) |
requests.delete() | 向HTML網頁提交刪除請求,對應於HTTP的DELETE(請求刪除URL位置儲存的資源) |
一個簡單的使用的例子:
import requests
url = 'https://www.baidu.com'
response = requests.get(url) #傳送get請求
response.status_code #獲取狀態碼
response.headers['content-type'] #獲取響應頭的content-type欄位
1.requests是使用屬性名來獲取對應的屬性值。會自動的將返回資訊unicode解碼
2.requests自動儲存了返回的內容,可以讀取多次
而常用的則是get函式,一些常用的引數如下:
引數 | 說明 |
---|---|
url | 這個不用多說,就是網站的url |
params | 將字典或位元組序列,作為引數新增到url中,get形式的引數 |
data | 將字典或位元組序列,作為引數新增到url中,post形式的引數 |
headers | 請求頭,可以修改User-Agent等引數 |
timeout | 超時時間 |
proxies | 設定代理 |
舉例:
1.傳送簡潔的請求,獲取一個簡單的網頁
import requests
r = requests.get('https://www.baidu.com') #最基本的不帶引數的get請求
r1 = requests.get(url='https://www.baidu.com',params={'wd':'python'}) #帶引數的get請求
那麼想要使用什麼方法就可以將get替換即可,如post、put等
2.為url傳參
url_params = {'key':'value'}
r = requests.get('url',aprams = url_params)
print(r.url)
列印結果為:url?key=value
3.定製頭和cookie資訊
header = {'user-agent':'my-app/0.0.1'}
cookie = {'key':'value'}
r = requests.get/post('url',headers=header,cookies = cookie)
4.響應
r.headers #返回字典型別,頭資訊
r.requests.headers #返回傳送到伺服器的頭資訊
r.cookies #返回cookies
5.超時
r=requests.get('url',timeout=1)
6.代理
proxies = {'http':'ip1','https':'ip2'}
requests.get('url',proxies=proxies)
7.上傳檔案
import requests
url = 'http://127.0.0.1:8080/upload'
files = {'file':('text.txt',n'Hello Requests.')} #必須顯示的設定檔名
r = requests.post(url,files = files)
print(r.text)
request模組抓取網頁原始碼並儲存到檔案例項:
"抓取網頁原始碼應儲存到檔案"
import requests
html = requests.get("https://www.baidu.com")
with open('test.txt','w',encoding = 'utf-8') as f:
f.write(html.text)
“讀取一個txt檔案,每次讀取一行,並儲存到另一個檔案中”
ff = open('test.txt','w',encoding='utf-8')
with open('test.txt',encoding='utf-8') as f:
for line in f:
ff.write(line)
ff.close()
request的異常處理:
當你能夠正常訪問一個網頁的時候,就會返回狀態碼200。但是當你有一些錯誤的時候,比如網頁連線錯誤,http錯誤異常,重定向異常,請求超時等等,這個時候response.status_code的值就不為200了,那麼該如何去捕捉異常呢?這裡利用response.raise_for_status()語句去捕捉異常,該語句在方法內部判斷r.status_code是否等於200,如果不等於的話就丟擲異常。
try:
response=requests.get(url)
response.raise_for_status()
except:
print("產生異常")