一、requests的常用方法使用樣式
1.requests.get(url, params=None, **kwargs)
向HTML網頁提交GET請求的方法,對應於HTTP的POST
2.requests.post(url, data=None, json=None, **kwargs)
向HTML網頁提交POST請求的方法,對應於HTTP的POST
3.requests.request(method, url, **kwargs)
構造一個請求,支撐一下各方法的基礎方法
4.requests.head(url, **kwargs)
獲取HTML網頁頭信息的方法,對應於HTTP的HEAD
5.**kwargs:控制訪問的參數,均為可選項,共13個
1)params:字典或字節序列,作為參數增加到url中
kv = {'key1':'value1','key2':'value2'} r = requests.request('GET','http://www.baidu.com',params=kv)
2)data:字典、字節序列或文件對象,作為Request的對象
kv = {'key1':'value1','key2':'value2'} r = requests.request('POST','http://www.baidu.com',data=kv)
3)json:JSON格式的數據,作為Request的內容
kv = {'key1':'value1','key2':'value2'} r = requests.request('POST','http://www.baidu.com',json=kv)
4)headers:字典,HTTP定制頭
hd = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36"} r = requests.request('POST','http://www.baidu.com',headers=hd)
5)cookies:字典或CookieJar,Request中的cookie
6)auth:元組,支持HTTP認證功能
7)files:字典類型,傳輸文件
fs = {'file':open('data.xls','rb')} r = requests.request('POST','http://www.baidu.com',files=fs)
8)timeout:設定超時時間,秒為單位
r = requests.request('GET','http://www.baidu.com',timeout=10)
9)proxies:字典類型,設置訪問代理服務器,可以增加登錄認證
pxs = {'http':'http://user:pass@10.10.10.1:1523'} r = requests.request('GET','http://www.baidu.com',proxies=pxs)
10)allow_redirects:True/False,默認為Ture,重定向開關
11)stream:True/False,默認為True,獲取內容立即下載開關
12)verify:True/False,默認為True,認證SSL證書開關
13)cert:本地SSL證書路徑
6.請求會話
在很多時候我們開發的爬蟲需要登錄,登錄后我們需要記錄登錄狀態,否則無法爬取登錄后才能爬取的網頁,在request中提供了requests.Session()這樣的類:
import requests s = requests.Session() s.get('http://httpbin.org/get')
這樣我們的request只要調用一次登錄入口就會自動維護網站的Session記錄我們的登錄狀態,以后我們可以直接使用request訪問登錄才能訪問的頁面。
7.Cookie獲取
我們可以使用cookies來獲取響應中的cookie: 如果某個響應中包含一些 cookie,你可以快速訪問它們:
req = requests.get("https://ptorch.com") req = requests.get("https://ptorch.com") print(req.cookies) print(req.cookies['laravel_session'])
要想發送你的cookies到服務器,可以使用cookies參數:
cookies = dict(cookies_are='working Test') req = requests.get("http://httpbin.org/cookies", cookies=cookies) print(req.text) # '{"cookies": {"cookies_are": "working Test"}}'
Cookie的返回對象為RequestsCookieJar,它的行為和字典類似,但界面更為完整,適合跨域名跨路徑使用。你還可以把Cookie Jar傳到Requests中:
jar = requests.cookies.RequestsCookieJar() jar.set('tasty_cookie', 'yum', domain='httpbin.org', path='/cookies') jar.set('gross_cookie', 'blech', domain='httpbin.org', path='/elsewhere') url = 'http://httpbin.org/cookies' req = requests.get(url, cookies=jar) print(req.text) # '{"cookies": {"tasty_cookie": "yum"}}'
保存cookie方便下次訪問,我們需要將CookieJar轉為字典或者將字典轉為CookieJar
#將CookieJar轉為字典:
cookies = requests.utils.dict_from_cookiejar(r.cookies) #將字典轉為CookieJar:
ookies = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=None, overwrite=True)
8.下載圖片
有時候我們想下載我們爬取頁面的img圖片,你可以使用requests請求圖片,獲取response.content文本信息,實際上獲取的是圖片的二進制文本,然后保存即可:
import requests response = requests.get("https://ptorch.com/img/logo.png") img = response.content open('logo.jpg', 'wb').write(response.content)
如果要下載驗證碼,可以使用上面的會話請求加載這里的下載代碼即可。
二、獲取Request響應
1.response對象的屬性
1)r.status_code
HTTP請求的返回狀態,200表示連接成功,404表示失敗
2)r.text
HTTP響應內容的字符串形式,即,url對應的頁面內容
3)r.encoding
從HTTP header中猜測的響應內容編碼方式
4)r.apparent_encoding
從內容分析出的響應內容編碼方式(備選編碼方式)
5)r.content
HTTP響應內容的二進制形式
2.理解Response的編碼
1)r.encoding
從HTTP header中猜測的響應內容編碼方式
如果header中不存在charset,則認為編碼為ISO-8859-1
2)r.apparent_encoding
從內容中分析出的響應內容編碼方式(備選編碼方式)
根據網頁內容分析出的編碼方式