Python requests 笔记(一)
Python requests
- 添加 HTTP請(qǐng)求頭
- 抓取二進(jìn)制文件
- 上傳文件
- 設(shè)置Cookie
- 設(shè)置同一個(gè)會(huì)話(Session)
- 使用代理
添加 HTTP請(qǐng)求頭
需要設(shè)置 get方法的headers參數(shù).該參數(shù)是一個(gè)字典類型的值,每一對(duì)key-value 就是一個(gè) Cookie。如果要設(shè)置中文,需要使用相關(guān)的函數(shù)進(jìn)行編碼與解碼,不過比urllib 和 urllib3 方便多了。
- quote :負(fù)責(zé)編碼
- unqoute :負(fù)責(zé)解碼
例子:
import requests from urllib.parse import quote,unquote # 寫請(qǐng)求頭 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('李寧') } # 發(fā)送請(qǐng)求 r = requests.get('http://httpbin.org/get',headers = headers) # 輸出響應(yīng)體 print(r.text) # 輸出name 請(qǐng)求頭的值(需要解碼) print('Name: ',unquote(r.json()['headers']['Name'])) ps:請(qǐng)求頭中的鍵在響應(yīng)體中,總是第一個(gè)英文字母大寫。不管你在代碼里寫是什么樣的。
如:
'name' :quote('李寧') # 變成 Name :李寧'NaMe' :quote('李寧') # 也是變成 Name :李寧抓取二進(jìn)制文件
一般獲取二進(jìn)制數(shù)據(jù)(圖片、視頻等),需要將數(shù)據(jù)保存到本地文件中。所以需要調(diào)用 Response.content 屬性獲得bytes形式的數(shù)據(jù)。
代碼:
上傳文件
用requests上傳文件也是相當(dāng)簡(jiǎn)單的,只需指定post方法的files參數(shù)即可。files參數(shù)的值可以是Buffered Reader對(duì)象,該對(duì)象可以用Python語言的內(nèi)置函數(shù)open返回。
代碼:
import requests from urllib.parse import quote,unquote # 寫請(qǐng)求頭 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('李寧') } # 發(fā)送請(qǐng)求 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 # 定義上傳的文件,字典中必須有一個(gè)key = file 的值,值類型是BfferedReader,可以用open函數(shù)返回 files1 = {'file':open('圖片1.png','rb')}r1 = requests.post('http://127.0.0.1:5000/',files = files1)print(r1.text)設(shè)置Cookie
使用requests 就簡(jiǎn)單得多,只需要使用cookies屬性就可以得到服務(wù)端發(fā)送過來的Cookie。設(shè)置Cookie也相當(dāng)簡(jiǎn)單。有如下2種方法設(shè)置Cookie,
get和post方法都有這兩個(gè)參數(shù),如果使用cookies參數(shù),需要?jiǎng)?chuàng)建Requestookiar對(duì)象,并使用set方法設(shè)置每一個(gè)Cookie。
在訪問某些網(wǎng)站時(shí),只有登錄用戶才能獲得正常顯示的內(nèi)容,所以一般的做法是先在網(wǎng)頁上登錄。
通過Chrome瀏覽器的開發(fā)者工具得到登錄后的Cookie(如圖5-8所示),然后將這些Cookie復(fù)制,放到文件或直接寫到程序中,當(dāng)客戶端請(qǐng)求這些網(wǎng)站時(shí),再將這些Cookie發(fā)送給服務(wù)端、這樣一來,盡管我們并不知道用戶名和密碼,但由于登錄標(biāo)識(shí)保存在Cookie中,所以給服務(wù)端發(fā)送了Cookie,
就相當(dāng)于登錄了。
最簡(jiǎn)單就是將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......' }設(shè)置同一個(gè)會(huì)話(Session)
在requests 中提供了Session 對(duì)象,可以無須用戶干預(yù)Cookie的情況下維持Session。通過Session對(duì)象的get、post等方法可以在同一個(gè)Session中向服務(wù)器發(fā)送請(qǐng)求。
代碼:
import requests#創(chuàng)建 Session 對(duì)象 session = requests.Session() # 其中 set/name/Bill 相當(dāng)于向服務(wù)器寫入一個(gè)名為name 的Cookie # 第一次發(fā)送請(qǐng)求 session.get('http://httpbin.org/cookies/set/name/Bill') #第二次發(fā)送請(qǐng)求 r2 = session.get('http://httpbin.org/cookies') print(r2.text)使用代理
requests使用代理發(fā)送請(qǐng)求非常容易,只需指定proxies參數(shù)即可,該參數(shù)是一個(gè)字典類型的值,每一對(duì) key?value表示一個(gè)代理的協(xié)議,如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)總結(jié)
以上是生活随笔為你收集整理的Python requests 笔记(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络库urillib3
- 下一篇: Python 创建随机名字的文件夹/文件