Python3爬蟲(四)請求庫的使用requests
阿新 • • 發佈:2018-04-27
with open decode python3 url -c highlight pos pen req
Infi-chu:
http://www.cnblogs.com/Infi-chu/
一、基本用法:
1. 安裝:
pip install requests
2. 例子:
import requests url = ‘http://www.baidu.com‘ r = requests.get(url) print(type(r)) # 類型是str(JSON格式) print(r.status_code) print(r.text) print(r.cookies)
【註】其余請求方法也是一樣的
r = requests.post(url) r = requests.put(url) r = requests.delete(url) r = requests.head(url) r = requests.options(url)
3. GET請求:
- 例子
import requests url = ‘http://www.baidu.com‘ r = requests.get(url) print(r.text)
若想在url中添加參數有兩種方式:
a. 直接添加
r = requests.get(url+參數)
b. 通過params參數添加
import requests data = {"name":"Infi-chu","age":"23"} r = requests.get(url,params=data)
網頁的返回類型是str類型,是JSON格式的,我們可以直接調用 json()方法
若返回結果不是JSON格式,便會出現解析錯誤,拋出 json.decode.JSONDecodeError異常
- 抓取網頁
可使用正則表達式和headers。
- 抓取二進制數據
圖片、音頻、視頻等文件本質上都是二進制碼組成的。
抓取GitHub圖標:
import requests r = requests.get("http://github.com/favicon.ico") print(r.text) print(r.content) # 保存圖片 with open(‘favicon.ico‘,‘wb‘) as f: f.write(r.content)
- 添加headers
在爬取知乎時必須在User-Agent中加入信息,否則不能爬取,會被攔截
4. POST請求
improt requests data = {‘name‘:‘Infi-chu‘,‘age‘=‘23‘} r = requests.post(‘http://www.baidu.com‘,data=data)
成功後會在form中看到所提交的數據(F12查看)
5. 響應
發送數據後,得到的就是響應,我們使用text和content獲取了內容,下面是另外的信息:
import requests r = requests.get(‘http://www.baidu.com‘) print(type(r.status_code),r.status_code) print(type(r.headers),r.headers) print(type(r.cookies),r.cookies) print(type(r.history),r.history) print(type(r.url),r.url)
headers 屬性返回 CaseInsensitiveDict 類型
cookies 屬性返回 RequestsCookieJar 類型
二、高級用法:
1.文件上傳
import requests f = {‘file‘:open(‘favicon.ico‘,‘rb‘)} r = requests.post(url,files=f) print(r.text)
2.Cookies
import requests r = requests.get(url) print(r.cookies) for k,v in r.cookies.items(): print(k+"="+v)
3.會話維持
使用Session對象
import requests s = requests.Session() s.get(‘http://httpbin.org/cookies/set/number/123456789‘) r = s.get(‘http://httpbin.org/cookies‘) print(r.text)
4.SSL證書驗證
requests提供了證書驗證的功能,使用verify參數控制是否檢查此證書,默認是True,會自動驗證
5.代理設置
對於某些網站,在測試的時候請求幾次,能正常獲取信息,但是一旦大規模爬取,可能會出現驗證碼或直接封掉IP,導致一段時間內無法訪問
代理設置:
import requests proxy = {‘http‘:‘http://ip:port‘,‘https‘:‘https://ip:port‘} requests.get(‘https://www.taobao.com‘,proxies=proxy)
6.超時設置
import requests r = requests.get(‘https://www.taobao.com‘,timeout=1) print(r.status_code)
7.身份認證
import requests from requests.auth import HTTPBasicAuth r = requests.get(url,auth=HTTPBasicAuth(‘username‘,‘password‘)) print(r.status_code) # 可簡寫為 r = requests.get(url,auth=(‘username‘,‘password‘)) print(r.status_code) # 也提供了OAuth認證,使用 pip3 install requests_oauthlib
8.Prepared Request
將請求表示為數據結構,這個數據結構叫Prepared Request
Python3爬蟲(四)請求庫的使用requests