談談Python大名鼎鼎的第三方庫Requests

2021-08-14 14:12:04 字數 3045 閱讀 2062

requests是基於urllib庫編寫的http庫,官方的大標題是這麼寫的:

人性化的http?手動斜眼笑,總之官方文件寫的挺逗逼的,非常值得一看。當然這個庫的強大也足以對得起官方文件不遺餘力的吹捧。

官方文件:

官方中翻:

注意:優先看英文原版,因為它的版本總是最新的。

在使用requests之前,http的請求訪問我一直用python標準庫urllib,用的也是不亦樂乎。後來接觸了requests,urllib那是啥玩意兒,再也沒碰過了。不得不說,requests要更加pythonic。他的引數傳遞、請求頭定製、**、會話控制等功能都十分簡單易用,點讚!

直接pip安裝:pip install requests

當然,用python的人一定要知道乙個東西就是anacoda,常用的庫基本都涵蓋在裡面了,強推!

import requests

url = ''

r= requests.get(url)

r= requests.post(url)

r= requests.put(url)

r= requests.delete(url)

r= requests.head(url)

r= requests.options(url)

r = requests.get(url,params = ,headers = headers)

至於為啥大家的ua都是以mozilla/5.0開頭,這又是一段有歷史淵源的故事,有興趣的朋友可以自行baidu/google。

payload = 

r = requests.post(url,data = payload,headers = headers)

有的時候傳參並不是form形式的,需要以json形式傳遞,直接json.dumps(payload)轉化成json即可,當然要事先import json

print(r.content) #以位元組的方式顯示,中文顯示為字元

print(r.text) #以文字的方式顯示,自動判定編碼格式(根據http頭部來猜測網頁編碼)

print(r.json()) #返回json內容,requests內建

有的時候r.text自動判斷出來的編碼可能會出錯,不能正確顯示內容。這個時候可以使用r.encoding = 'utf-8'來手動選擇編碼。當然,也可以print(r.encoding)來獲取當前的編碼格式。

r = requests.get(url, timeout = 0.1)
r.cookie可以直接拿到該響應中包含的cookie。

也可以自己傳遞cookie進去,像這樣:

cookies = dict(cookies_are='working')

r = requests.get(url, cookies=cookies)

上面出現的所有例子,每次請求都是發起了乙個新的請求,相當於每次都開啟了乙個瀏覽器單獨訪問。

如果我們需要保持乙個長久的會話,用以下**實現:

s = requests.session()

s.headers.update(headers)

cookie_dict =

cookie = requests.utils.cookiejar_from_dict(cookie_dict, cookiejar=none, overwrite=true)

s.cookies = cookie #會話也可以手動傳入cookie,但需要使用上述函式

r = s.get(url)

由於requests只能保持 cookiejar 型別的cookie,所以我們需要自己傳遞cookie時需要用專有函式將dict轉化成cookiejar 。

當然也有requests.utils.dict_from_cookiejar()逆向該過程。

這樣就可以保留cookie發起新的請求,常用於登入帳號後可以在登入狀態繼續操作。

proxies = 

r = requests.get(url, proxies=proxies)

如果**需要驗證:

proxies =
還有一些比較常用的功能:

r = requests.get(url)

#響應狀態碼,常用於判斷是否正確訪問到網頁內容

print(r.status_code)

#追蹤重定向

print(r.history)

response.history 是乙個 response 物件的列表,為了完成請求而建立了這些物件。這個物件列表按照從最老到最近的請求進行排序。

可以通過allow_redirects引數來關閉重定向,直接返回請求的內容:

>>> r = requests.get(url, allow_redirects=false)

>>> r.status_code

301>>> r.history

遇到網路問題(如:dns 查詢失敗、拒絕連線等)時,requests 會丟擲乙個 connectionerror 異常。

如果 http 請求返回了不成功的狀態碼, response.raise_for_status() 會丟擲乙個 httperror 異常。

若請求超時,則丟擲乙個 timeout 異常。

若請求超過了設定的最大重定向次數,則會丟擲乙個 toomanyredirects 異常。

所有requests顯式丟擲的異常都繼承自 requests.exceptions.requestexception 。

大名鼎鼎的BERT模型

bert是bidirectional encoder representations from transformers的縮寫,它是2018年谷歌團隊提出來的新型語言表徵模型 language representation model ps.它也是芝麻街的人物,就長下面這樣 為什麼說它是新型的呢?讓...

大名鼎鼎的malloc函式(動態記憶體分配)

原型 extern void malloc unsigned int num bytes 標頭檔案 在tc2.0中可以用malloc.h或 alloc.h 注意 alloc.h 與 malloc.h 的內容是完全一致的 而在visual c 6.0中可以用malloc.h或者stdlib.h。功能 ...

python 的基礎 學習 第三

1,in not in 判斷子元素是是否在原字串 字典,列表,集合 中,主要是用在檢測敏感字 print a in abcchhhhd 有則返回true,print j in abcchhhhd 沒有則返回false 主要是用在檢測敏感字 comment input while true if 血腥...