python requests
官方文檔
一、介紹
Requests 是⽤Python語⾔編寫,基于urllib,采⽤Apache2 Licensed開源協定的 HTTP 庫。它⽐ urllib 更加⽅便,可以節約我們⼤量的⼯作,完全滿⾜HTTP測試需求。
⼀句話——Python實作的簡單易⽤的HTTP庫
二、基本用法
1. 執行個體
用 GET方法請求網頁,得到一個 response 對象,并傳回類型,狀态碼,響應體類型、内容、cookies。
import requests
r = requests.get('https://www.baidu.com/')
print(type(r)) # response類型
print(r.status_code) # 狀态碼
print(type(r.text)) # 相應體内容
print(r.text) # 内容
print(r.cookies) # cookies
print(type(r.headers), r.headers) # 響應頭
print(type(r.url), r.url) # 請求位址
print(type(r.history), r.history) # 請求曆史
其他請求類型的實作:
import requests
r = requests.post('http://httpbin.org/post')
r = requests.put('http://httpbin.org/put')
r = requests.delete('http://httpbin.org/delete')
r = requests.head('http://httpbin.org/head')
r = requests.options('http://httpbin.org/options')
2. GET 方法(參數的使用)
- 附加額外資訊(params)
import requests
data = {
'name' : 'germey',
'age' : 22
}
r = requests.get('http://httpbin.org/get', params=data)
print(r.text) # json 格式的字元串
print(r.json()) # 将 json 格式的字元串 轉字典
- 添加請求頭
import requests
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
}
# 加入請求頭
r = requests.get('http://www.zhihu.com/explore', headers=headers)
- 抓取二進制檔案(寫入檔案)
import requests
import re
r = requests.get('http://www.github.com/favicon.ico')
print(r.text) # str 類型 (兩種屬性)
print(r.content) # 位元組類型
with open('favicon.ico', 'wb') as f:
f.write(r.content)
三、進階用法
1.檔案上傳
import requests
import re
files = {
'file' : open('favicon.ico', 'rb')
}
r = requests.post('http://httpbin.org/post', files=files)
print(r.text)
2. Cookies
擷取 Cookies
import requests
r = requests.get('https://www.baidu.com')
print(r.cookies)
for key, value in r.cookies.items():
print(key + '=' + value)
可以用 cookies 維持登陸狀态,先登入,再将 cookies 複制下來當作 headers
3. 會話維持
Session 對象會幫助我們維護一個會話。經常用于在同一個浏覽器打開不同頁面。
import requests
s = requests.Session()
r = s.get('http://httpbin.org/cookies/set/number/123456789')
print(r.text)
4. 代理設定
import requests
# http 代理
proxies = { # 代理位址隻是舉例子
"http" : "http://10.10.1.10:3128",
"https" : "http://10.10.1.10.1080",
}
# 需要認證的:
proxies = { # 代理位址隻是舉例子
"http" : "http://user:[email protected]:3128",
}
# socks 代理
proxies = { # 代理位址隻是舉例子
"http" : "socks5://user:password@host:port",
}
requests.get('http://www.taobao.com', proxies=proxies)
5. 逾時設定
import requests
r = requests.get('http://www.taobao.com', timeout=(5.11, 30))