Requests —— Python實(shí)現(xiàn)的簡單易用的HTTP庫
Python的標(biāo)準(zhǔn)庫中自帶一個(gè)urllib模塊雹仿,可以實(shí)現(xiàn)爬取網(wǎng)頁的功能雇卷,但是體驗(yàn)不好洪橘,而Requests庫繼承了urllib的所有特性颠区,并且使用起來更方便帚戳,所以目標(biāo)導(dǎo)向的話玷或,Requests為不二之選。
安裝
pip install requests
import requests
1.發(fā)送get請求片任,返回一個(gè)response對象
response = requests.get('http://www.baidu.com')
2.response對象中具有一些參數(shù)
# 查看響應(yīng)內(nèi)容偏友,response.text
# 返回的是Unicode格式的數(shù)據(jù),經(jīng)過解碼后的數(shù)據(jù)对供,
# Requests會按照自己猜測的方式進(jìn)行解碼位他,所以如果出現(xiàn)亂碼,可能就是這方面出問題來
print(response.text)
# 查看響應(yīng)內(nèi)容产场,response.content返回的bytes數(shù)據(jù)類型鹅髓,沒有經(jīng)過解碼
print(response.content)
print(response.content.decode('utf-8')) # 防止出現(xiàn)亂碼的操作——自己解碼
# 查看完整url地址
print(response.url) #http://www.baidu.com/
# 查看Requests使用的編碼(自己猜測的方式進(jìn)行解碼)
# Requests會基于HTTP頭部對響應(yīng)的編碼作出有根據(jù)的推測。
print(response.encoding) #ISO-8859-1
# 查看響應(yīng)碼
print(response.status_code) #200
3.可以在發(fā)送請求的同時(shí)京景,傳遞一些參數(shù)給http服務(wù)器
kw = {'wd':'明星'}
headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36'}
response = requests.get('http://www.baidu.com/s',params=kw, headers=headers)
print(response.urk) #'http://www.baidu.com/s?wd=%E6%98%8E%E6%98%9F'
4.發(fā)送post請求 data參數(shù)
response = requests.post("http://www.baidu.com/",data=data)
5.代理 proxies參數(shù)
# 根據(jù)協(xié)議類型窿冯,選擇不同的代理
proxies = {
'http': 'xxxxx',
'https': 'xxxxx',
}
response = requests.get("http://www.baidu.com/",proxies=proxies)
6.cookie:如果一個(gè)響應(yīng)中包含了cookie,利用cookies屬性拿到這個(gè)返回的cookie值:
resp = requests.get('http://www.baidu.com/')
print(resp.cookies) #返回CookieJar對象
# <RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
print(resp.cookies.get_dict()) # 返回cookie值,字典形式 {'BDORZ': '27315'}
7.session 在跨請求時(shí)候共享某些參數(shù)确徙,比如在同一個(gè)session實(shí)例發(fā)出的所有請求之間共享cookie值
# 1醒串、 創(chuàng)建session對象,可以保存Cookie值
session = requests.Session()
# 2米愿、處理 headers
headers = {}
# 3、 需要登錄的用戶名和密碼
data = {"user_name":"user_name", "password":"xxxxx"}
# 4鼻吮、發(fā)送附帶用戶名和密碼的請求育苟,并獲取登錄后的Cookie值,保存在ssion里
session.post(xxx, data = data)
# 5椎木、 session包含用戶登錄后的Cookie值违柏,可以直接訪問那些登錄后才可以訪問的頁面
response = session.get(xxx)
8.不信任的SSL證書 verify 參數(shù)博烂,默認(rèn)為True,表示驗(yàn)證SSL證書漱竖,若是沒有安全證書禽篱,會報(bào)錯(cuò)SSLError
verify=False (解決報(bào)錯(cuò)問題)
9. json Requests庫中有一個(gè)json函數(shù)
print(type(response.text)) #<class 'str'>
print(response.json()) 效果等價(jià) print(json.loads(response.text))
print(type(response.json())) # <class 'dict'>
10.超時(shí)設(shè)置 防止一直卡在訪問頁面上
from requests.exceptions import ReadTimeout
try:
response = requests.get("http://httpbin.org/get", timeout = 0.5) #設(shè)置訪問時(shí)間0.5s
print(response.status_code)
except ReadTimeout:
print('Timeout')