get 請求我們選擇 騰訊天氣 接口。首先我們看文檔如下:

這里就相當于是接口文檔,從這里我們可以獲取到:請求方法、url、請求參數(shù)。
首先我們在 Postman 中嘗試一下(Postman 很容易入手,可以用來輔助來學習):

通過 Postman ,我們能夠正常訪問數(shù)據(jù)。
接下來使用 requests 庫:
import requests
from pprint import pprint
# url
url = 'https://wis.qq.com/weather/common?source=xw&weather_type=forecast_1h|forecast_24h|index|alarm|limit|tips'
# 構造數(shù)據(jù),requests 全系列支持字典類型的數(shù)據(jù)
payload = {
# 參考文檔中的參數(shù)部分,逐一構造
'province': '四川',
'city': '成都',
'county': '武侯區(qū)'
}
# 發(fā)送 get 請求,返回結果是服務端的響應數(shù)據(jù)
r = requests.get(url, params=payload)
# 獲取響應報文體
# 1.以文本方式獲取報文主體
pprint(r.text)
# 2. 以字典格式獲取報文主體(僅針對返回是 json 格式的數(shù)據(jù))
pprint(r.json())
# 3. 以二進制方式獲取報文主體(視頻、圖片等)
pprint(r.content)
其實上面的代碼,發(fā)送請求就一句話:
r = requests.get(url, params=payload)
其他代碼都是在構造數(shù)據(jù),獲取響應。
當然 get 請求本身參數(shù)都在 url 中,我們也可以將參數(shù)構造在 url 中:
# url,注意參數(shù)我們通過&和鍵值對的形式放在了 url 中
url = 'https://wis.qq.com/weather/common?source=xw&weather_type=forecast_1h|forecast_24h|index|alarm|limit|tips&province=四川&city=成都&county=武侯區(qū)'
# 發(fā)送 get 請求,返回結果是服務端的響應數(shù)據(jù)
r = requests.get(url)
# 這里的響應是 json 格式的數(shù)據(jù),我們直接通過 json() 方法查看
pprint(r.json())
不管使用字典構造參數(shù),亦或者是直接拼接在 url 中,最終都會被 requests 自動為我們轉碼為標準的 url 格式,我們可以通過 r.request.url查看請求中的實際 url 。
print(r.request.url)
## https://wis.qq.com/weather/common?...&county=%E6%AD%A6%E4%BE%AF%E5%8C%BA
關于響應對象中的其他屬性,將在后面專門講解。
關于header
一般我們是不需要專門處理請求的 header 信息,除非其中涉及到了認證的 token、或者 cookie 等數(shù)據(jù)需要同時傳遞給服務器。這得益于 requests 優(yōu)秀的設計,很多常用的頭部字段已由 requests 幫我們自動處理了。
requests 中關于 header 的處理,與參數(shù)很像,都是通過字典來構造。
比如,我這里傳遞用于標識請求數(shù)據(jù)類型的 content-type字段:
headers = {
# 這里的頭部字段不需要區(qū)分大小寫
'content-type': 'application/x-www-form-urlencoded;charset=UTF-8'
}
r = requests.get(url, headers=headers)
獲取到響應的數(shù)據(jù),說明我們的請求發(fā)送成功啦,后面就應該是對結果的斷言咯。不過先穩(wěn)一下,我們先把其他的方法了解一下。