1. 程式人生 > Python爬蟲入門教學 >07 requests 第三方庫

07 requests 第三方庫

官方定義:Requests is the only Non-GMO HTTP library for Python, safe for human consumption.
簡單翻譯一下就是:Requests 是唯一適用於 Python 的 Non-GMO HTTP 庫,可供開發人員安全使用。

上面是 requests 庫的官方定義。簡單來說 requests 庫是 Python 的第三方 HTTP 庫,以 urllib 為基礎。因為使用簡單,人性化,安全的特性,被廣泛的用來爬蟲的請求傳送。

1. requests 安裝

可以通過 PIP 進行安裝:

Tips:Python 環境安裝之後 PIP 也會自動安裝,直接開啟 CMD 命令列使用即可。

pip install requests

也可以到 官網下載,然後通過以下命令進行安裝。然後進入到下載的目錄,輸入以下命令:

python setup.py install

2. requests 請求

下面我們使用網作為目標網站,並使用 requests 庫進行請求:

2.1 get 無引數請求

我們直接使用 request 的 get 方法來請求網,然後列印返回結果:

import requests
r = requests.get('https://www.imooc.com/')
print(r.text)

請求結果如下,格式為HTML:


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>網-程式設計師的夢工廠</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1">
<meta name="renderer" content="webkit" />
<meta name="mobile-agent" content="format=wml"; url="https://m.imooc.com/">
<link rel="alternate" media="only screen and (max-width: 640px)" href="https://m.imooc.com/">
<meta name="mobile-agent" content="format=xhtml"; url="https://m.imooc.com/">
<meta name="mobile-agent" content="format=html5"; url="https://m.imooc.com/">
<meta property="qc:admins" content="77103107776157736375" />
......

2.2 get 有引數請求

下面我們給 get 請求加上引數,來看看返回結果:

import requests

r = requests.get('https://www.imooc.com/common/adver-getadverlistbymarking?marking=global_newcomer
', {marking: global_newcomer})
print(r.text)

請求結果如下,格式為 Json:

{"result":0,"data":{"global_newcomer":{"id":"2696","name":"\u65b0\u4eba\u6709\u793c","column_id"
:"366","description":"","pic":"\/\/img3.mukewang.com\/5df2084b096514ff25600136.png","links":"https:\/\/www.imooc.com\/act\/newcomer","type":"99","type_id":"0","create_time":"1576142925","uid":"10001","is_open":"0","seqid":"0","status":"0","start_time":"0","end_time":"0","skillid_list":""}},"msg":"\u6210\u529f"}

2.3 無引數的post請求

import requests

r = requests.post('https://www.imooc.com/search/hotwords‘)
print(r.text)

請求結果如下,格式為Json:

{"result":0,"data":["Vue","Python","Java","flutter","springboot","docker","React","\u5c0f\u7a0b\u5e8f"],"msg":"\u6210\u529f"}

2. 4 有引數的post請求

import requests

r = requests.post('https://httpbin.org/post', data = {'key':'value'})
print(r.text)

請求結果如下,格式為Json:

{
  "args": {}, 
  "data": "", 
  "files": {}, 
  "form": {
    "key": "value"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Content-Length": "9", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.22.0", 
    "X-Amzn-Trace-Id": "Root=1-5e3bde61-bb0c787463f0852c81b7faa8"
  }, 
  "json": null, 
  "origin": "124.78.170.82", 
  "url": "https://httpbin.org/post"
}

除了 get,post 等基本請求,Request也支援其他的請求型別。以下羅列的是官方提供的其他請求方法:

r = requests.put('https://httpbin.org/put', data = {'key':'value'})
r = requests.delete('https://httpbin.org/delete')
r = requests.head('https://httpbin.org/get')
r = requests.options('https://httpbin.org/get')

3. requests 的響應

3.1 獲取二進位制響應內容

import requests
r = requests.post('https://www.imooc.com/')
print(r.content)

返回的二進位制文字如下所示:

b'\n\r\n<!DOCTYPE html>\r\n<html>\r\n<head>\r\n<meta charset="utf-8">\r\n<title>\xe6\x85\x95\xe8\xaf\xbe\xe7\xbd\x91-\xe7\xa8\x8b\xe5\xba\x8f\xe5\x91\x98\xe7\x9a\x84\xe6\xa2\xa6\xe5\xb7\xa5\xe5\x8e\x82</'
......

某些情況下,我們需要獲取二進位制的內容,比如圖片或者一些視訊的資訊流。

3.2 獲取響應狀態碼和響應編碼

import requests
r = requests.post('https://www.imooc.com/')
print(r.status_code)
print(r.encoding)

請求成功後將會得到以下的狀態碼。另外,request 庫同時也提供了 requests.codes.ok 來表示請求成功。

通過響應碼,我們可以知道我們請求的是否傳送成功,是否被正確的解析,以及是否正確的返回。通過檢驗程式的編碼,來防止編碼不一致導致的亂碼問題。

4. 自定義請求頭

這裡,我們把程式的請求頭封裝在了字典裡,然後通過字典的形式傳給 requests 進行請求,這樣做,有助於我們程式碼的整潔性和可維護性。

url = 'https://www.imooc.com/'
headers = {'user-agent': 'app/1.0'}
r = requests.get(url, headers=headers)
print(r.request.headers) # 響應狀態碼

上述程式碼,我們仍然可以請求成功,只是更改了 user-agent 欄位而已,返回的結果如下所示:

{'user-agent': 'muke_app/1.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

5. 高階內容

上面的內容我們只是羅列了一些 requests 庫經常使用的功能,但是已經足夠我們進行爬蟲開發了。當然 requests 庫還有許多的高階功能比如設定請求時間,會話,代理,以及身份認證等。有興趣的同學可以參考去 Requests官網 學習。這裡我們就不一一贅述了。

6. 小結

這一個小節,我們講解了 Requests 第三方庫,介紹了安裝,以及請求和響應。Reqeusts 庫的設計非常的簡單方便,絕大多數的爬蟲程式都是使用Requests庫進行網頁的爬取。