文的文字及圖片來源於網絡,僅供學習、交流使用,不具備任何商業用途,版權歸原做者全部,若有問題請及時聯繫咱們以做處理。python
做者: ncepu_Chengit
PS:若有須要Python學習資料的小夥伴能夠加點擊下方連接自行獲取github
http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cefjson
curlapi
curl是一個利用URL語法在命令行下進行網絡通訊的工具,相似於一個命令行版本的瀏覽器,但不會對頁面進行渲染.其用法很簡單,直接在命令行中輸入curl [URL地址] [參數]
便可,如:瀏覽器
curl https://www.baidu.com
其經常使用參數以下: wget服務器
wget也是一個利用URL語法在命令行環境下進行文件傳輸的工具,其基本用法爲wget [URL地址] [參數],
如:cookie
wget https://www.baidu.com
其經常使用參數以下: 下面例子演示如何使用wget鏡像一個網站到本地並啓動:網絡
使用wget --mirror命令將整個網站的鏡像下載到本地app
wget --mirror -p --convert-links http://www.httpbin.org
切換到下載好的資源目錄下,使用Python自帶的http.server模塊開啓一個微型服務器
python -m http.server
訪問localhost:8000,便可訪問咱們搭建在本機上的鏡像網站.
Python中有兩個經常使用的抓取數據的庫:urllib和requests.其中requests庫封裝了urllib庫,且比urllib庫更爲優雅.所以,咱們能夠直接學習requests庫.
requests庫
request庫的應用比較簡單,下面是官方提供的一段示例代碼:
r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
r.status_code # 返回 200
r.headers['content-type'] # 返回 'application/json; charset=utf8'
r.encoding # 返回 'utf-8'
r.text # 返回 u'{"type":"User"...'
r.json() # 返回 {u'private_gists': 419, u'total_private_repos': 77, ...}
發送HTTP請求
下面幾個方法能夠發送HTTP請求,對應於HTTP的各類請求類型
requests.get(url, params=None, **kwargs)
requests.post(url, data=None, json=None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.delete(url, **kwargs)
requests.head(url, **kwargs)
requests.options(url, **kwargs)
上面六個方法分別對應HTTP請求類型中的GET,POST,PUT,DELETE,HEAD和OPTIONS
,各參數意義以下:
url: 請求的URL地址.
params: GET請求放進URL中的請求參數,以字典形式存儲.
data: 請求體中的數據.
**kwargs: 該請求須要的其餘參數,包括:
headers: 以字典格式存儲的請求頭內容.
json: 以字典形式存儲的請求體中數據,等同於data參數
cookies: 以字典形式存儲的cookies.
allow_redirects: 是否容許重定向,爲一個布爾值
timeout: 設置超時時間,單位爲秒
auth: 設置身份認證信息
上述requests.get(), requests.post(), requests.put(), requests.delete(), requests.head(), requests.options()方法都會返回一個requests.models.Response對象,該對象封裝了HTTP響應報文,該對象提供了下述經常使用方法和屬性用於解析HTTP響應.
解析響應狀態的屬性和方法
url: 表示該HTTP請求的URL.
payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
r = requests.get('http://httpbin.org/get', params=payload)
r.url # 獲得 http://httpbin.org/get?key1=value1&key2=value2&key2=value3
tatus_code: 該HTTP響應的狀態碼.
reason: 響應狀態碼的說明.
解析響應內容的屬性和方法:
encoding: 該HTTP響應的編碼.
content: 該HTTP響應的內容.
text: 該HTTP響應的文本.根據r.encoding設置的編碼格式對r.content進行解碼獲得.
.json(): 將json格式的相應內容解析爲字典,若解析失敗則拋出ValueError異常.
解析響應頭的屬性和方法:
headers: 以字典形式返回HTTP響應頭,該字典的特殊之處在於其不區分鍵的大小寫.
r.headers['Content-Type'] # 獲得 'application/json'
r.headers.get('content-type') # 獲得 'application/json'
報錯
遇到網絡問題(如DNS 查詢失敗、拒絕鏈接等)時,拋出一個ConnectionError異常.
若HTTP請求返回了不成功的狀態碼(4xx或5xx),調用Response對象的raise_for_status() 會拋出一個HTTPError異常.
若請求超過了設定的最大重定向次數,則會拋出一個TooManyRedirects異常.