天天看點

【Python爬蟲】爬蟲利器 requests 庫小結requests庫– the End –

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應用程式【建議收藏!】