Python 爬蟲教程 3 - 使用 requests

上一篇文章講了什麼是 HTTP 協議,而這次我將告訴你如何使用 Python 通過 HTTP 來獲取互聯網上的資源。

什麼是 requests

簡單的來講 requests 是一個簡單易用的 HTTP 客戶端程序,由 Python 社區大牛 Kenneth 發起。所以 requests 到底是幹什麼的呢?往簡單了想,你可以把它當作一個程序使用的瀏覽器(當然我們所使用的瀏覽器很多功能它都沒有,比如不能自動載入圖片,不能自動運行 js 等等),但是作爲一個程序客戶端來說它足夠通用,在爬蟲裏我們使用它來獲取在互聯網上的各種資源。
requests 的使用十分簡單,比如你想要獲得 http://www.baidu.com 所對應的資源,只需要簡單的調用 get 方法,可以看到返回的是一個 html 文檔字符串,你可以將這個巨大的字符串拷貝到單獨的文件中,再用瀏覽器打開,就可以得到一個類似百度首頁的頁面了。

>>> import requests
>>> res = requests.get('http://www.baidu.com')
>>> print res.text
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8>
...
</div> </body> </html>

一些簡單的示例

requests 是一個第三方庫,所以需要用 pip 進行安裝。在使用 requests 之前,需要先導入模塊

>>> import requests

對應於 HTTP 的不同動詞,可以直接調用模塊裏同名函數發送 HTTP 請求。

>>> get_res = requests.get('http://www.baidu.com/') # GET 方法
>>> post_res = requests.post('http://www.baidu.com/') # POST 方法

getpost 應該是我們最常用的兩個函數了,也是 requests 庫的核心,除了 URL 這個參數之外,它們還接受其他參數,下面介紹其中最常用的兩個:
params,字典類型,通過這個參數傳遞需要附帶的參數,使用 GET 方法的話也就是我們常在 URL 問號後面看到的那些參數。

>>> params = {'wd': 'hello'}
>>> res = requests.get('http://www.baidu.com/', params=params)

headers,字典類型,同樣的我們可以通過 headers 參數對請求的首部進行定製。

>>> headers = {'accept': 'text/html', 'user-agent': 'Safari/10.0.1'}
>>> res = requests.get('http://www.baidu.com/', headers=headers)

那要如何獲得服務器返回的 HTTP 響應呢,每一個請求函數都會返回一個響應對象,可以通過這個響應對象獲取 HTTP 響應的一切信息。
比如可以獲得返回的報文內容

>>> res = requests.get('http://www.baidu.com/')
>>> res.text # 字符串形式數據
>>> res.json # 以 json 格式對數據進行解碼
>>> res.content # 二進制數據

獲得狀態碼,判斷請求執行的狀態

>>> res. status_code
200

獲得響應頭,以供進一步使用,你的結果應該和我類似

>>> res. headers
{'Content-Encoding': 'gzip', 'Transfer-Encoding': 'chunked', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Server': 'bfe/1.0.8.18', 'Last-Modified': 'Mon, 23 Jan 2017 13:27:44 GMT', 'Connection': 'Keep-Alive', 'Pragma': 'no-cache', 'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Date': 'Fri, 10 Feb 2017 06:36:54 GMT', 'Content-Type': 'text/html'}

接下來是什麼

除了上面所說的內容,requests 還有許多更多更強大的功能,包括 HTTP 認證,文件上傳,HTTPS 加密等,你可以在官網獲得全面而詳細的資料。

參考資料
1. requests 中文官網 http://cn.python-requests.org/zh_CN/latest/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章