requests介紹
我們已經學過Python內置的urllib
模塊,也能訪問網頁,但是用起來比較麻煩。然而requests
模塊提供了更簡單易用的功能。
可通過pip install requests
來安裝。
簡單使用requests的例子
resp = requests.get(url, params={})
其中可以通過params來傳遞參數,注意params是dict類型。
屬性 | 描述 |
---|---|
resp.status_code |
返回HTTP Status |
resp.headers |
返回response header信息, 返回類型是key不區分大小寫的dict子類 |
resp.content |
返回bytes類型的response |
resp.text |
返回unicode類型的response |
resp.encoding |
返回response所屬編碼(自動檢測) |
resp.reason |
Textual reason of responded HTTP Status, e.g. “Not Found” or “OK” |
resp.is_redirect |
判斷是否發生了重定向 |
resp.url |
返回響應的最終url |
resp.json() |
將響應數據以json格式返回 |
下面代碼最後通過api查詢手機所屬的地址信息。
import requests
url = "https://www.qq.com"
resp = requests.get(url)
# HTTP Status 如 200 404
print("status: ",resp.status_code)
# header信息
print("response headers:", resp.headers)
# bytes類型的response
print("bytes response:", resp.content)
# unicode類型的response
print("unicode response:", resp.text)
# response所屬編碼(自動檢測)
print("response encoding:", resp.encoding)
# Textual reason of responded HTTP Status, e.g. "Not Found" or "OK"
print("reason:", resp.reason)
# 判斷是否發生了重定向
print("is redirect:", resp.is_redirect)
# 響應的最終url
print("final url:", resp.url)
# 將響應內容以json格式返回 由於訪問的騰訊頁面並不是返回json數據 故此處註釋掉該代碼
# resp.json()
# 可通過 params 來傳遞參數, 注意是dict類型
resp = requests.get("http://tcc.taobao.com/cc/json/mobile_tel_segment.htm", params={"tel": "18627210383"})
基於百度翻譯API獲取翻譯結果
import requests
from pprint import pprint
url = "https://fanyi.baidu.com/sug"
content = input("請輸入您想要翻譯的內容: ")
data = {"kw": content}
headers = {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}
resp = requests.post(url, data=data, headers=headers)
res_json = resp.json()
pprint(res_json)
會話處理和cookie處理
和urllib
模塊,一樣是基於自己寫的簡單的SpringBoot程序來做的會話處理和cookie處理。
下面代碼有詳細的註釋就不解釋了。
需要提醒的是使用requests
模塊傳遞json數據有如下兩種方式。
import requests
from pprint import pprint
pre_url = "http://localhost:8080"
# 保持會話
session = requests.Session()
def login():
url = pre_url + "/login"
data = {"username": "admin", "password": "admin"}
# 傳遞json數據的兩種方式 下面被註釋掉的是第一種
# headers = {"Content-Type": "application/json"}
# resp = requests.post(url, data=json.dumps(data), headers=headers)
# 第二種
resp = session.post(url, json=data)
# 打印response裏的cookie值 當然服務端設置了cookie值纔會有
for k,v in resp.cookies.items():
print("{}={}".format(k,v))
pprint(resp.json())
# 設置cookie 其中cookie的類型是requests.cookies.RequestsCookieJar
session.cookies.set("test", "ok")
# 獲取cookie值
print("JSESSIONID={}".format(session.cookies.get("JSESSIONID")))
def user_list():
url = pre_url + "/user/list"
resp = session.get(url)
pprint(resp.json())
if __name__ == "__main__":
login()
user_list()
pass