1. 程式人生 > 其它 >Python學習筆記(requests模組與實戰)

Python學習筆記(requests模組與實戰)

技術標籤:筆記python

基礎的一些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("產生異常")