requests庫
Requests 是一個 Python 的 HTTP 用戶端庫。 支援許多 HTTP 特性,可以非常友善地進行網頁請求、網頁分析和處理網頁資源,擁有許多強大的功能。
本文主要介紹 requests 庫的基礎使用。
1. 安裝與導入
安裝requests庫:快捷鍵 Windows+r 打開運作控制框,輸入 cmd,進入指令行,輸入:
pip install requests
導入:
import requests
2. 主要方法
2.1 常見的網頁請求方法
常見的網頁請求方法有兩種:get 和 post。
get 方法,一般是直接通過發送請求,來擷取網頁資訊。在浏覽器中直接輸入 URL 并回車,我們便發送了一個get請求,請求的參數會直接包含在 URL 裡。比如,直接通過 get 方法擷取網頁上的豆瓣電影排行榜等。。
post 請求大多在表單送出時發起。比如登入網站時,填寫了賬号和密碼後點選登入,這通常便發起了一個 post 請求,其資料以表單的形式傳輸,而不會展現在 URL 中。
get 請求和 post 請求的差別:
- get 請求中的參數包含在 url 裡面,傳遞的資料可以再 url 中看到。而 post 請求的 url 不會包含這些資料,資料通過表單的形式傳輸,而不會展現在 url 中。
- get 請求送出的資料最多隻有 1024 位元組,而 post 方式則沒有這個限制
對于 get 和 post 方法應用方面的選擇,通常在登入時送出賬号和密碼,包含了敏感資訊。若使用 get 請求,那麼使用者密碼會暴露在 url 中,容易造成資訊洩露,是以常用 post 方法發送。上傳檔案時,由于檔案可能過大,也會選用 post 方式。
2.2 七個主要方法:
方法 | 描述 |
---|---|
requests.request | 發送請求,支撐以下各方法 |
requests.get | 向網頁發送get請求,擷取網頁資訊(GET) |
requests.post | 向網頁發送post請求(POST) |
requests.put | 向網頁發送put請求(PUT) |
requests.head | 擷取網頁請求頭資訊(HEAD) |
requests.patch | 向網頁送出局部修改請求(PATCH) |
requests.delete | 向網頁送出删除請求(DELETE) |
requests.Session | 會話,相比于直接requests請求,具有保持功能 |
3. 主要的使用方法
3.1 requests.request(method, url, **kwargs)
- method 設定請求方式(get、post、put、head、patch、delete)
- url 設定請求位址
- kwargs 控制通路參數
request 方法中各方法的參數與以下相應的方法相同。
3.2 requests.get(url, params=None, **kwargs)
- url 設定請求位址。一般位址中問号後面的可以省略,問号後面的即是請求參數。
- params 設定發送請求時所帶的參數,字典或位元組流格式,作為額外參數連接配接到url中(問号後的部分)。可選
- kwargs 控制通路參數,見 kwargs參數表。可選
發送請求:
url = 'https://blog.csdn.net/weixin_52132159' # 我的部落格首頁
#url = 'https://blog.csdn.net/weixin_52132159?spm=1019.2139.3001.5343'
headers = {
'cookie': '...',
'Referer': '...'
}
params = {'spm': '1019.2139.3001.5343'}
response = requests.get(url, headers=headers, params=params) # 發送請求
3.3 requests.post(url, data=None, json=None, **kwargs)
- url 設定請求位址
- data 為字典、位元組序列或檔案對象,作為請求的内容,向伺服器送出資源時使用,可選
- json 為 JSON格式的資料,作為内容向伺服器送出。可選
- kwargs 控制通路參數,見 kwargs參數表。可選
發送請求:
url = 'https://fanyi.so.com/index/search' # 360翻譯
headers = {
'pro': 'fanyi'
}
data = {
'eng': 0, # 是否從英文轉中文
'query': '你好' # 翻譯的單詞
}
response = requests.post(url, headers=headers, data=data) # 發送請求
3.4 requests.Session
Session 方法可以實作回話,持續性地發送requests請求,能夠跨請求保持cookie。
經執行個體化後,可用 get、post 等方法發送請求,用法不變。
示例:
response = requests.Session()
response.post('https://fanyi.so.com/index/search')
response.get('https://blog.csdn.net/weixin_52132159')
3.4 其他
- requests.put(url, data=None, **kwargs)
- requests.head(url, **kwargs)
- requests.patch(url, data=None, **kwargs)
- requests.delete(url, **kwargs)
其他的方法使用過程與 get 與 post 類似,都有着kwargs參數表 中的參數,依實際情況選擇使用。
4. kwargs 參數表
參數 | 說明 |
---|---|
params | 送請求時所帶的參數,字典或位元組流格式,作為額外參數連接配接到url中 |
data | 字典、位元組序列或檔案對象,作為requests的内容,向伺服器送出資源時使用 |
json | JSON格式的資料,作為内容向伺服器送出 |
headers | 字典類型,請求頭 |
cookies | 字典或 CookieJar 對象,從HTTP協定中解析 cookie。字典形式的 cookie 也可放入 headers中 |
auth | 元組類型,支援HTTP認證功能 |
files | 字典類型,向伺服器傳輸檔案時使用 |
timeout | 設定等待響應的時間,機關為秒 |
proxies | 字典類型,設定通路代理伺服器 |
allow_redirects | 布爾類型,預設為True,重定向開關 |
stream | 布爾類型,預設為True,判斷是否對擷取内容立即下載下傳 |
verify | 布爾類型,預設為True,認證SSL證書的開關 |
cert | 儲存本地SSL證書路徑的字段 |
參考文章:https://blog.csdn.net/qq_43406976/article/details/104538316
5. 響應内容
發送請求後,傳回的是一個 response 對象。我們可以通過該對象的屬性和方法擷取傳回内容。
方法或屬性 | 說明 |
---|---|
response.url | 傳回請求的URL |
response.text | 傳回headers中的編碼解析的結果,可以通過r.encoding='gbk’來變更解碼方式 |
response.content | 傳回二進制結果 |
response.status_code | 傳回響應碼,如200、404等 |
response.headers | 傳回請求頭 |
response.cookies | 傳回一個RequestsCookieJar對象 |
response.history | 傳回以清單存儲的請求曆史記錄 |
response.json() | 傳回傳回結果經json解碼後的内容,一般傳回一個字典(這是個方法,要帶括号) |
6. 使用格式示例
6.1 爬取360翻譯(POST)
url = 'https://fanyi.so.com/index/search'
headers = {
'pro': 'fanyi',
}
data = {
'eng': 1,
'query': 'hello'
}
r = requests.post(url, data=data, headers=headers)
print(r.url)
print(r.status_code)
print(r.json()['data']['fanyi'])
輸出:
https://fanyi.so.com/index/search
200
你好
6.2 爬取圖檔/視訊
import requests
pic = requests.get('https://profile.csdnimg.cn/E/5/9/3_weixin_52132159').content
with open ('作者頭像.jpg','wb') as i:
i.write(pic)
更多爬蟲的教學和案例可以見作者的專欄:Python爬蟲
– the End –
這篇文章就到這裡了,點個贊支援一下吧!
本文收錄于專欄:Python爬蟲
關注作者,持續閱讀作者的文章,學習更多Python知識!
https://blog.csdn.net/weixin_52132159
2021/8/6
已完成的爬蟲教程:
- Python爬蟲從0到1 | 入門實戰:360翻譯 ——requests庫之POST方法
- Python爬蟲從0到1 | 爬取酷我音樂資訊并下載下傳 ——requests庫之GET方法
推薦閱讀
- 【爬蟲】想看片了,來一起用 Python 爬取豆瓣電影分類排行榜
- Python爬蟲 | 爬取b站北京奧運會開幕式彈幕,有多少人從東京奧運會跑過來的?
- 絕密!Python爬蟲告訴你刷分機器人背後的原理!這篇文章差點沒過審
- Python每天一道題:昆蟲繁殖問題?我把密密麻麻的幼蟲和成蟲搞定了
- 沒想到我連五年級的題目都解不出來?可不能被人小看,讓萬能的Python登場
- Python:程式猿怎麼追女生?教你短短幾行代碼表白,告别表白尴尬!
- 想學Python不知從何入手?學習Python必備秘籍,附位址,速拿!
- Python标準庫:datetime 時間和日期子產品 —— 時間的擷取和操作詳解
- 學習筆記 | PyInstaller 使用教程——用pyinstaller打包exe應用程式【建議收藏!】