乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Python 爬蟲(二):Requests 庫

       文炳春秋 2020-03-13

      所謂爬蟲就是模擬客戶端發(fā)送網絡請求,獲取網絡響應,并按照一定的規(guī)則解析獲取的數(shù)據并保存的程序。要說 Python 的爬蟲必然繞不過 Requests 庫。

      1 簡介

      對于 Requests 庫,官方文檔是這么說的:

      Requests 唯一的一個非轉基因的 Python HTTP 庫,人類可以安全享用。
      警告:非專業(yè)使用其他 HTTP 庫會導致危險的副作用,包括:安全缺陷癥、冗余代碼癥、重新發(fā)明輪子癥、啃文檔癥、抑郁、頭疼、甚至死亡。

      這個介紹還是比較生動形象的,便不再多說。安裝使用終端命令 pip install requests

      2 快速上手

      2.1 發(fā)送請求

      導入 Requests 模塊:

      import requests
      

      獲取網頁:

      r = requests.get('http://')
      

      此時,我們獲取了 Response 對象 r,我們可以通過 r 獲取所需信息。Requests 簡便的 API 意味著所有 HTTP 請求類型都是顯而易見的,我們來看一下使用常見 HTTP 請求類型 get、post、put、delete 的示例:

      r = requests.head('http:///get')
      r = requests.post('http:///post', data = {'key':'value'})
      r = requests.put('http:///put', data = {'key':'value'})
      r = requests.delete('http:///delete')
      

      通常我們會設置請求的超時時間,Requests 使用 timeout 參數(shù)來設置,單位是秒,示例如下:

      r = requests.head('http:///get', timeout=1)
      

      2.2 參數(shù)傳遞

      在使用 get 方式發(fā)送請求時,我們會將鍵值對形式參數(shù)放在 URL 中問號的后面,如:http:///get?key=val ,Requests 通過 params 關鍵字,以一個字符串字典來提供這些參數(shù)。比如要傳 key1=val1key2=val2http:///get,示例如下:

      pms= {'key1': 'val1', 'key2': 'val2'}
      r = requests.get("http:///get", params=pms)
      

      Requests 還允許將一個列表作為值傳入:

      pms= {'key1': 'val1', 'key2': ['val2', 'val3']}
      

      :字典里值為 None 的鍵都不會被添加到 URL 的查詢字符串里。

      2.3 響應內容

      我們來獲取一下服務器的響應內容,這里地址 https://api.github.com 為例:

      import requests
      r = requests.get('https://api.github.com')
      print(r.text)
      
      # 輸出結果
      # {"current_user_url":"https://api.github.com/user","current_user...
      

      當訪問 r.text 之時,Requests 會使用其推測的文本編碼,我們可以使用 r.encoding 查看其編碼,也可以修改編碼,如:r.encoding = 'GBK',當改變了編碼,再次訪問 r.text 時,Request 都將會使用 r.encoding 的新值。

      1)二進制響應內容
      比如當我們要獲取一張圖片的數(shù)據,會以二進制的方式獲取響應數(shù)據,示例如下:

      from PIL import Image
      from io import BytesIO
      i = Image.open(BytesIO(r.content))
      

      2)JSON響應內容
      Requests 中已經內置了 JSON 解碼器,因此我們可以很容易的對 JSON 數(shù)據進行解析,示例如下:

      import requests
      r = requests.get('https://api.github.com')
      r.json()
      

      :成功調用 r.json() 并不一定響應成功,有的服務器會在失敗的響應中包含一個 JSON 對象(比如 HTTP 500 的錯誤細節(jié)),這時我們就需要查看響應的狀態(tài)碼了 r.status_coder.raise_for_status(),成功調用時 r.status_code 為 200,r.raise_for_status() 為 None。

      2.4 自定義請求頭

      當我們要給請求添加 headers 時,只需給 headers 參數(shù)傳遞一個字典即可,示例如下:

      url = 'http://'
      hds= {'user-agent': 'xxx'}
      r = requests.get(url, headers=hds)
      

      :自定義 headers 優(yōu)先級是低于一些特定的信息的,如:在 .netrc 中設置了用戶認證信息,使用 headers 設置的授權就不會生效,而當設置了 auth 參數(shù),.netrc 的設置會無效。所有的 headers 值必須是 string、bytestring 或者 unicode,通常不建議使用 unicode。

      2.5 重定向與歷史

      默認情況下,Requests 會自動處理除了 HEAD 以外的所有重定向,可以使用響應對象的 history 屬性來追蹤重定向,其返回為響應對象列表,這個列表是按照請求由晚到早進行排序的,看一下示例:

      import requests
      r = requests.get('http://github.com')
      print(r.history)
      # 輸出結果
      # [<Response [301]>]
      

      如果使用的是 get、post、put、delete、options、patch 可以使用 allow_redirects 參數(shù)禁用重定向。示例如下:

      r = requests.get('http://', allow_redirects=False)
      

      2.6 錯誤與異常

      當遇到網絡問題(如:DNS 查詢失敗、拒絕連接等)時,Requests 會拋出 ConnectionError 異常;在 HTTP 請求返回了不成功的狀態(tài)碼時, Response.raise_for_status() 會拋出 HTTPError 異常;請求超時,會拋出 Timeout 異常;請求超過了設定的最大重定向次數(shù),會拋出 TooManyRedirects 異常。所有 Requests 顯式拋出的異常都繼承自 requests.exceptions.RequestException。

      參考:
      http://cn./zh_CN/latest/user/quickstart.html

      歡迎關注文末公眾號,免費領取海量學習資料!



        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多