requests庫詳解 --Python3


本文介紹了requests庫的基本使用,希望對大家有所幫助。
requests庫官方文檔:https://2.python-requests.org/en/master/
一、請求:
1、GET請求
coding:utf8
import requests

response = requests.get('http://www.httpbin.org/get')
print(response.text)
2、POST請求
# coding:utf8
import requests

data = {
    'name': 'Thanlon',
    'age': 22,
    'sex': '男'
}
response = requests.post('http://httpbin.org/post', data=data)
print(response.text)
3、解析json
# coding:utf8
import requests, json

response = requests.get('http://www.httpbin.org/get')
print(type(response.text))
# print(response.text)
print(response.json())  # 等價於json.loads(response.text)
print(type(response.json()))
4、獲取二進制數據
# coding:utf8
import requests

response = requests.get('https://www.baidu.com/img/dong_5af13a1a6fd9fb2c587e68ca5038a3c8.gif')
print(type(response.text))
print(type(response.content))
print(response.text)
print(response.content)  # 二進制流
5、保存二進制文件(圖片、視頻)
# coding:utf8
import requests

response = requests.get('https://www.baidu.com/img/dong_5af13a1a6fd9fb2c587e68ca5038a3c8.gif')
with open('image.gif', 'wb') as f:
    f.write(response.content)
    f.close()
6、添加headers(有需要添加請求頭信息,否則請求不到,如“知乎”)
# coding:utf8
# get請求,添加headers
import requests

headers = {
    'user-agent': 'Mouser-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36zilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
}
response = requests.get('https://www.zhihu.com/explore', headers=headers)
print(response.text)
#coding:utf8
#post請求,添加headers
import requests

data = {
    'name': 'Thanlon',
    'age': 22,
    'sex': '男'
}
headers = {
    'user-agent': 'Mouser-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36zilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'
}
response = requests.post('http://httpbin.org/post', data=data, headers=headers)
print(response.text)
二、響應(response)
1、response相關屬性
#coding:utf8
import requests

response = requests.get('http://httpbin.org')
print(type(response.status_code), response.status_code)#狀態碼 <class 'int'>
print(type(response.headers), response.headers)#響應頭 <class 'requests.structures.CaseInsensitiveDict'>
print(type(response.cookies), response.cookies)#cookie <class 'requests.cookies.RequestsCookieJar'>
print(type(response.url), response.url)#請求的url <class 'str'>
print(type(response.history), response.history)  # 訪問的歷史記錄 <class 'list'>
2、狀態碼判斷
#coding:utf8
import requests

response = requests.get('http://httpbin.org')
if not response.status_code == requests.codes.ok:#requests.codes.ok等價於200
    pass
else:
    print('Request Successfully')
3、文件上傳
#coding:utf8
import requests

files = {
    'file': open('image.gif', 'rb')  # file可自定義
}
response = requests.post('http://httpbin.org/post', files=files)
print(response.text)
4、獲取cookies
#coding:utf8
import requests

response = requests.get('http://www.baidu.com')
print(response.cookies)
print(response.cookies.items())  # [('BDORZ', '27315')]
for key, value in response.cookies.items():
    print(key + '=' + value)

在這里插入圖片描述

5、會話維持:模擬登錄(相當於一個瀏覽器在請求)
#coding:utf8
import requests

s = requests.Session()
s.get('http://httpbin.org/cookies/set/BDORZ/123456')
response = s.get('http://httpbin.org/cookies')
print(response.text)
6、證書驗證
#coding:utf8
import requests
response = requests.get('https://www.12306.cn')
print(response.status_code)
#coding:utf8
import requests, urllib3

urllib3.disable_warnings()  # 消除警報信息
response = requests.get('https://www.12306.cn', verify=False)  # verify默認是True
print(response.status_code)  # 沒有進行證書驗證,有警報信息,
7、指定證書
#coding:utf8
import requests

response = requests.get('https://www.12306.cn', cert={'/path/server.crt', '/path/key'})
print(response.status_code)
8、代理的設置
#coding:utf8
import requests

proxies = {
    'http': 'http://127.0.0.1:9743',
    'https': 'https://127.0.0.1:9743'
}
response = requests.get('https://www.taobao.com', proxies=proxies)
print(response.status_code)
9、代理的設置(存在用戶名和密碼的情況下)
#coding:utf8
import requests

proxies = {
    'http': 'http://user:password@127.0.0.1:9743',
    'https': 'https://user:password@127.0.0.1:9743'
}
response = requests.get('https://www.taobao.com', proxies=proxies)
print(response.status_code)
10、socks代理
import requests

proxies = {
    'http': 'socks5://127.0.0.1:9743',
    'https': 'socks5://127.0.0.1:9743'
}
response = requests.get('https://www.taobao.com', proxies=proxies)
print(response.status_code)
11、超時設置
#coding:utf8
import requests

response = requests.get('http://httpbin.org', timeout=1)
print(response.status_code)
12、認證設置

遇到401錯誤,即:請求被禁止,需要加上auth參數

#coding:utf8
import requests
from requests.auth import HTTPBasicAuth

response = requests.get('https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))
#response = requests.get('https://api.github.com/user', auth=('user', 'pass'))
print(response.status_code)
13、異常處理
#coding:utf8
import requests
from requests.exceptions import ReadTimeout, HTTPError, RequestException, ConnectionError

try:
    response = requests.get('http://httpbin.org', timeout=0.3)
    print(response.status_code)
except ReadTimeout:
    print('Timeout')
except HTTPError:
    print('Http Error')
# except ConnectionError:
#     print('Connection Error')
except RequestException:
    print('Request Error ')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM