Python requests 笔记(一)
Python requests
- 添加 HTTP請求頭
- 抓取二進制文件
- 上傳文件
- 設置Cookie
- 設置同一個會話(Session)
- 使用代理
添加 HTTP請求頭
需要設置 get方法的headers參數.該參數是一個字典類型的值,每一對key-value 就是一個 Cookie。如果要設置中文,需要使用相關的函數進行編碼與解碼,不過比urllib 和 urllib3 方便多了。
- quote :負責編碼
- unqoute :負責解碼
例子:
import requests from urllib.parse import quote,unquote # 寫請求頭 headers ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',# 將中文編碼'name' :quote('李寧') } # 發送請求 r = requests.get('http://httpbin.org/get',headers = headers) # 輸出響應體 print(r.text) # 輸出name 請求頭的值(需要解碼) print('Name: ',unquote(r.json()['headers']['Name'])) ps:請求頭中的鍵在響應體中,總是第一個英文字母大寫。不管你在代碼里寫是什么樣的。
如:
'name' :quote('李寧') # 變成 Name :李寧'NaMe' :quote('李寧') # 也是變成 Name :李寧抓取二進制文件
一般獲取二進制數據(圖片、視頻等),需要將數據保存到本地文件中。所以需要調用 Response.content 屬性獲得bytes形式的數據。
代碼:
上傳文件
用requests上傳文件也是相當簡單的,只需指定post方法的files參數即可。files參數的值可以是Buffered Reader對象,該對象可以用Python語言的內置函數open返回。
代碼:
import requests from urllib.parse import quote,unquote # 寫請求頭 headers ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',# 將中文編碼# 'name' :quote('李寧') } # 發送請求 link = 'https://tse4-mm.cn.bing.net/th/id/OIP-C.a9A8bFqvNQ_iw7neprKWzwHaKH?w=206&h=282&c=7&o=5&dpr=1.25&pid=1.7' r = requests.get(link,headers = headers) print(r.text) with open('圖片1.png','wb') as f:f.write(r.content) import requests # 定義上傳的文件,字典中必須有一個key = file 的值,值類型是BfferedReader,可以用open函數返回 files1 = {'file':open('圖片1.png','rb')}r1 = requests.post('http://127.0.0.1:5000/',files = files1)print(r1.text)設置Cookie
使用requests 就簡單得多,只需要使用cookies屬性就可以得到服務端發送過來的Cookie。設置Cookie也相當簡單。有如下2種方法設置Cookie,
get和post方法都有這兩個參數,如果使用cookies參數,需要創建Requestookiar對象,并使用set方法設置每一個Cookie。
在訪問某些網站時,只有登錄用戶才能獲得正常顯示的內容,所以一般的做法是先在網頁上登錄。
通過Chrome瀏覽器的開發者工具得到登錄后的Cookie(如圖5-8所示),然后將這些Cookie復制,放到文件或直接寫到程序中,當客戶端請求這些網站時,再將這些Cookie發送給服務端、這樣一來,盡管我們并不知道用戶名和密碼,但由于登錄標識保存在Cookie中,所以給服務端發送了Cookie,
就相當于登錄了。
最簡單就是將Cookie 放到headers中
headers = {'Host':'csdn.net/?spm=1011.2124.3001.4476','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.73','Cookie':'uuid_tt_dd=10_37481955370-1625655302106-686916; Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=6525*1*10_37481955370-1625655302106-686916!5744*1*qq_39838607......' }設置同一個會話(Session)
在requests 中提供了Session 對象,可以無須用戶干預Cookie的情況下維持Session。通過Session對象的get、post等方法可以在同一個Session中向服務器發送請求。
代碼:
import requests#創建 Session 對象 session = requests.Session() # 其中 set/name/Bill 相當于向服務器寫入一個名為name 的Cookie # 第一次發送請求 session.get('http://httpbin.org/cookies/set/name/Bill') #第二次發送請求 r2 = session.get('http://httpbin.org/cookies') print(r2.text)使用代理
requests使用代理發送請求非常容易,只需指定proxies參數即可,該參數是一個字典類型的值,每一對 key?value表示一個代理的協議,如http、https等。
代碼:
import requestshesders = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36', 'Host':'jd.com' } proxies ={'http':'http://182.140.244.163:8118','https':'https://182.140.244.163:8118' }link = 'https://www.jd.com' r1 = requests.get(link,proxies = proxies,headers= hesders,verify=False) print(r1.text)總結
以上是生活随笔為你收集整理的Python requests 笔记(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络库urillib3
- 下一篇: 看小说有广告?不可能的,分分钟教你爬取小