《Python網絡爬蟲與數據挖掘小課堂》——part4

Requests庫的入門-pythonpython


01git

簡介github


Requests庫是Python HTTP 庫。web

Requests做用:自動爬取HTML頁面/自動提交網絡請求。json

Requests庫項目地址:http://docs.python-requests.org/en/master/服務器

中文下載地址:http://docs.python-requests.org/zh_CN/latest/微信


02cookie

安裝網絡

Requests庫的安裝有兩種方式:app

1.pip安裝:簡單快捷(推薦)

Win_7_64bit平臺: 

「以管理員身份運行」cmd,執行 pip install requests

   

 Python的下載(版本有2.x和3.x)、安裝、環境變量配置、pip安裝及使用見往前文章(爬蟲系列)。

2.python命令方式

先去github網址的Requests庫項目下載:https://github.com/kennethreitz/requests

下載完解壓便可


下載完解壓到桌面便可,該文件夾目錄以下:


Win_7_64bit平臺:「以管理員身份運行」cmd,

執行 python setup.py install

其中setup.py是Requests庫中setup.py的絕對路徑。


測試代碼:以官網爲例

>>> import requests

>>> r = requests.get('https://www.baidu.com')

>>> r.status_code

>>> r.headers

>>> r.encoding

>>> r.text


03

方法

Requests庫的七個主要方法及說明

requests.request():構造一個請求,支撐如下各方法的基礎方法

requests.get():獲取HTML網頁的主要方法,對應於HTTP的GET

requests.head():獲取HTML網頁頭信息的方法,對應於HTTP的HEAD

requests.post():向HTML網頁提交POST請求的方法,對應於HTTP的POST

requests.put():向HTML網頁提交PUT請求的方法,對應於HTTP的PUT

requests.patch():向HTML網頁提交局部修改請求,對應於HTTP的PATCH

requests.delete():向HTML頁面提交刪除請求,對應於HTTP的DELETE

01

Requests庫的get()方法



requests.get(url, params=None, **kwargs)

  • url : 擬獲取頁面的url連接

  • params : url中的額外參數,字典或字節流格式,可選

  • **kwargs : 12個控制訪問的參數


02

Requests庫的2個重要對象

Response對象包含爬蟲返回的內容

Response對象包含服務器返回的全部信息,也包含請求的Request信息

Response對象的屬性及說明

r.status_code:HTTP請求的返回狀態,200表示鏈接成功,404表示失敗

r.text:HTTP響應內容的字符串形式,即,url對應的頁面內容

r.encoding:從HTTP header中猜想的響應內容編碼方式

r.apparent_encoding:從內容中分析出的響應內容編碼方式(備選編碼方式)

r.content:HTTP響應內容的二進制形式


理解Response的編碼

r.encoding:從HTTP header中猜想的響應內容編碼方式

r.apparent_encoding:從內容中分析出的響應內容編碼方式(備選編碼方式)

詳細說明以下:

  1. r.encoding:若是header中不存在charset,則認爲編碼爲ISO‐8859‐1

  2. r.text:根據r.encoding顯示網頁內容

  3. r.apparent_encoding:根據網頁內容分析出的編碼方式,能夠看做是r.encoding的備選


03

理解Requests庫的異常


異常及說明

requests.ConnectionError:網絡鏈接錯誤異常,如DNS查詢失敗、拒絕鏈接等

requests.HTTPError:HTTP錯誤異常

requests.URLRequired:URL缺失異常

requests.TooManyRedirects:超過最大重定向次數,產生重定向異常

requests.ConnectTimeout:鏈接遠程服務器超時異常

requests.Timeout:請求URL超時,產生超時異常


r.raise_for_status()在方法內部判斷r.status_code是否等於200,若是不是200,產生異常 requests.HTTPError,不須要增長額外的if語句,該語句便於利用try‐except進行異常處理。

示例代碼:

import requests

def getHTMLText(url):

    try:

        r = requests.get(url, timeout=30)

        r.raise_for_status()

        r.encoding = r.apparent_encoding

        return r.text

    except:

        return "產生異常"

if __name__ == "__main__":

    url = "http://www.baidu.com"

    print(getHTMLText(url))



04

HTTP協議與Requests庫

HTTP,Hypertext Transfer Protocol,超文本傳輸協議

HTTP是一個基於「請求與響應」模式的、無狀態的應用層協議

HTTP協議採用URL做爲定位網絡資源的標識,URL格式以下:

http://host[:port][path]

host: 合法的Internet主機域名或IP地址

port: 端口號,缺省端口爲80

path: 請求資源的路徑

URL是經過HTTP協議存取資源的Internet路徑,一個URL對應一個數據資源


HTTP協議對資源的操做:

方法及說明

GET——請求獲取URL位置的資源

HEAD——請求獲取URL位置資源的響應消息報告,即得到該資源的頭部信息

POST——請求向URL位置的資源後附加新的數據

PUT——請求向URL位置存儲一個資源,覆蓋原URL位置的資源

PATCH——請求局部更新URL位置的資源,即改變該處資源的部份內容

DELETE——請求刪除URL位置存儲的資源


經過URL和命令管理資源,操做獨立無狀態,網絡通道及服務器成爲了黑盒子


理解PATCH和PUT的區別

假設URL位置有一組數據UserInfo,包括UserID、UserName等20個字段

需求:用戶修改了UserName,其餘不變

採用PATCH,僅向URL提交UserName的局部更新請求

採用PUT,必須將全部20個字段一併提交到URL,未提交字段被刪除

PATCH的最主要好處:節省網絡帶寬

HTTP協議與Requests庫

HTTP協議方法 Requests庫方法 功能一致性
GET requests.get() 一致
HEAD requests.head() 一致
POST requests.post() 一致
PUT requests.put() 一致
PATCH   requests.patch() 一致
DELETE requests.delete() 一致


Requests庫主要方法解析

requests.request(method, url, **kwargs)

  • method : 請求方式,對應get/put/post等7種

  • url : 擬獲取頁面的url連接

  • **kwargs:控制訪問的參數,共13個


requests.request(method, url, **kwargs)

method : 請求方式

  1. r = requests.request('GET', url, **kwargs)

  2. r = requests.request('HEAD', url, **kwargs)

  3. r = requests.request('POST', url, **kwargs)

  4. r = requests.request('PUT', url, **kwargs)

  5. r = requests.request('PATCH', url, **kwargs)

  6. r = requests.request('delete', url, **kwargs)

  7. r = requests.request('OPTIONS', url, **kwargs)


**kwargs:控制訪問的參數

  1. params : 字典或字節序列,做爲參數增長到url中

  2. data    : 字典、字節序列或文件對象,做爲Request的內容

  3. json : JSON格式的數據,做爲Request的內容

  4. headers : 字典,HTTP定製頭

  5. cookies : 字典或CookieJar,Request中的cookie

  6. auth : 元組,支持HTTP認證功能

  7. files   : 字典類型,傳輸文件

  8. timeout : 設定超時時間,秒爲單位

  9. proxies : 字典類型,設定訪問代理服務器,能夠增長登陸認證

  10. allow_redirects : True/False,默認爲True,重定向開關

  11. stream  : True/False,默認爲True,獲取內容當即下載開關

  12. verify  : True/False,默認爲True,認證SSL證書開關

  13. cert    : 本地SSL證書路徑


requests.get(url, params=None, **kwargs)

url : 擬獲取頁面的url連接

params : url中的額外參數,字典或字節流格式,可選

**kwargs: 12個控制訪問的參數


requests.head(url, **kwargs)

url : 擬獲取頁面的url連接

**kwargs: 12個控制訪問的參數


requests.post(url, data=None, json=None, **kwargs)

url : 擬更新頁面的url連接

data  : 字典、字節序列或文件,Request的內容

json : JSON格式的數據,Request的內容

**kwargs: 12個控制訪問的參數


requests.put(url, data=None, **kwargs)

url : 擬更新頁面的url連接

data  : 字典、字節序列或文件,Request的內容

**kwargs: 12個控制訪問的參數


requests.patch(url, data=None, **kwargs)

url : 擬更新頁面的url連接

data  : 字典、字節序列或文件,Request的內容

**kwargs: 12個控制訪問的參數


requests.delete(url, **kwargs)

url : 擬刪除頁面的url連接

**kwargs: 12個控制訪問的參數



未完待續...............





歡迎留言......


請你們關注公衆號動態!

請你們關注公衆號動態!

請你們關注公衆號動態!




本文分享自微信公衆號 - IT技術小咖(IT-arch)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索