PYTHON 爬蟲筆記三:Requests庫的基本使用


知識點一:Requests的詳解及其基本使用方法

  • 什么是requests庫

  Requests庫是用Python編寫的,基於urllib,采用Apache2 Licensed開源協議的HTTP庫,相比urllib庫,Requests庫更加方便,可以節約我們大量的工作,完全滿足HTTP測試需求。

  Requests是用python語言基於urllib編寫的,采用的是Apache2 Licensed開源協議的HTTP庫如果你看過上篇文章關於urllib庫的使用,你會發現,其實urllib還是非常不方便的,

而Requests它會比urllib更加方便,可以節約我們大量的工作。(用了requests之后,你基本都不願意用urllib了)一句話,requests是python實現的最簡單易用的HTTP庫,建議爬蟲使用requests庫。

    默認安裝好python之后,是沒有安裝requests模塊的,需要單獨通過pip安裝

  • 安裝

pip insatll request
  • Requests庫的用法詳解

  1. 試例

    import requests
     
    response = requests.get('http://www.baidu.com/')#首先調用requests的get方法
    
    print(type(response))
    print(response.status_code)
    print(type(response.text))
    print(response.text)#不需要解碼就可以直接打印信息print(response.cookies)
    print(response.cookies)
  2. 各種請求方式(HTTP測試網站:http://httpbin.org/)

    import requests
    
    requests.post('http://httpbin.org/post')
     
    requests.put('http://httpbin.org/put')
     
    requests.delete('http://httpbin.org/delete')
     
    requests.head('http://httpbin.org/get')
     
    requests.options('http://httpbin.org/get')
  3.  請求

    1. GET請求

      1. 基本get請求

        import requests
         
        response = requests.get('http://httpbin.org/get')
        print(response.text)#對比urllib,無需用decode解碼
      2.  帶參GET請求

        import requests
         
        response = requests.get('http://httpbin.org/get?name=Arise&age=22')
        print(response.text)

        另一種寫法:

        import requests
         
        data = {
        'name':'Arise',
        'age':22
        }
        #直接使用requests.get的params參數即可實現以上的操作 response = requests.get('http://httpbin.org/get',params = data) print(response.text)
      3. 解析JSON

        import requests
        
        response = requests.get('http://httpbin.org/get')
         
        print(type(response.text))
        print(response.json())  #可以對比一下Json轉化的和直接調用response的Json方法的區別print(response.json())
        print(type(response.json()))

         另一種方式比較:

        import requests
        import json
        response = requests.get('http://httpbin.org/get')
         
        print(type(response.text))
        
        print(response.json())
        print(json.loads(response.text))
        
        print(type(response.json()))
      4. 獲取二進制數據(圖片,音頻的下載)

        import requests
         
        response2 = requests.get('https://github.com/favicon.ico')
        print(type(response2.text),type(response2.content)) print(response2.text) print(response2.content)

        將圖片抓取下來:

        import requests
         
        response2 = requests.get('https://github.com/favicon.ico')
         
        with open('E://favicon.ico','wb')as f:
            f.write(response2.content)
            f.close()
      5.  添加headers

        1. 沒有headers時,有可能獲取不了網頁源代碼
          import requests
          #不加headers有可能會被禁,造成爬取失敗
          response = requests.get('http://www.zhihu.com/explore')
          
          print(response.text)

          獲取的結果:

          <html>
          <head><title>400 Bad Request</title></head>
          <body bgcolor="white">
          <center><h1>400 Bad Request</h1></center>
          <hr><center>openresty</center>
          </body>
          </html>
          獲取的結果
        2. 有headers情況下,獲取網頁源代碼
          import requests
          
          headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36'}
          response = requests.get('http://www.zhihu.com/explore', headers=headers)
          print(response.text)

          獲取的結果:

          <!DOCTYPE html>
          <html lang="zh-CN" dropEffect="none" class="no-js no-auth ">
          <head>
          <meta charset="utf-8" />
          
          <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
          <meta name="renderer" content="webkit" />
          <meta http-equiv="X-ZA-Response-Id" content="1f0be26a2a6632839cfb9ce762ba9d07">
          
          <meta http-equiv="X-ZA-Experiment" content="default:None,ge3:ge3_9,ge2:ge2_1,nwebQAGrowth:experiment,is_office:false,nweb_growth_people:default,is_show_unicom_free_entry:unicom_free_entry_off,app_store_rate_dialog:close,android_profile_panel:panel_b,search_advert_position:1,live_store:ls_a2_b2_c1_f2,nweb_search:nweb_search_heifetz,search_hybrid_tabs:pin-3#album-7,new_live_feed_mediacard:new,hybrid_zhmore_video:yes,new_mobile_column_appheader:new_header,search_tab:collapse,rt:y,ad_r:a,growth_search:s2,qaweb_related_readings_content_control:close,android_pass_through_push:all,new_sign_bg:new,new_mobile_app_header:true,np:1,android_search_tab_style:search_tab_style_b,u_re:0,android_db_recommend_action:open,zcm-lighting:zcm,android_db_feed_hash_tag_style:button,mobile_feed_guide:block,qrcode_login:qrcode,is_new_noti_panel:no,nweb_search_suggest:default">
          <title>發現 - 知乎</title>
          ...
          ...
          ...
          ...
          獲取的結果
    2. POST請求 

      1. 基本POST請求

        import requests
         
        data ={'name':'Arise','age':22}
        response = requests.post('http://httpbin.org/post',data = data)
         
        print(response.text)

        獲取的結果:

        {
          "args": {}, 
          "data": "", 
          "files": {}, 
          "form": {
            "age": "22", 
            "name": "Arise"
          }, 
          "headers": {
            "Accept": "*/*", 
            "Accept-Encoding": "gzip, deflate", 
            "Connection": "close", 
            "Content-Length": "17", 
            "Content-Type": "application/x-www-form-urlencoded", 
            "Host": "httpbin.org", 
            "User-Agent": "python-requests/2.18.4"
          }, 
          "json": null, 
          "origin": "112.91.182.26", 
          "url": "http://httpbin.org/post"
        }
        獲取的結果
      2. 加headers的請求

        import requests
         
        data ={'name':'Arise','age':22}
        headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
         
        response2 = requests.post('http://httpbin.org/post',data = data,headers = headers)
         
        print(response2.json())

        獲取的結果:

        {'args': {}, 'data': '', 'files': {}, 'form': {'age': '22', 'name': 'Arise'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Connection': 'close', 'Content-Length': '17', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}, 'json': None, 'origin': '112.91.182.26', 'url': 'http://httpbin.org/post'}
        獲取的結果
  4.  響應

    1. response屬性

      import requests
      #常用的response屬性
      
      headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
       
      response3 = requests.get('http://www.jianshu.com',headers = headers)
      print(type(response3.status_code),response3.status_code)
      print(type(response3.headers),response3.headers)
      print(type(response3.cookies),response3.cookies)
      print(type(response3.url),response3.url)
      print(type(response3.history),response3.history)

      獲得的結果:

      <class 'int'> 200
      <class 'requests.structures.CaseInsensitiveDict'> {'Date': 'Tue, 07 Aug 2018 03:47:28 GMT', 'Server': 'Tengine', 'Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked', 'X-Frame-Options': 'DENY', 'X-XSS-Protection': '1; mode=block', 'X-Content-Type-Options': 'nosniff', 'ETag': 'W/"679a5982b15c1b6676846b75321c20c4"', 'Cache-Control': 'max-age=0, private, must-revalidate', 'Set-Cookie': 'locale=zh-CN; path=/', 'X-Request-Id': 'afbf2087-b6d0-42e9-8c10-f5fc13a8568e', 'X-Runtime': '0.007606', 'Strict-Transport-Security': 'max-age=31536000; includeSubDomains; preload', 'Content-Encoding': 'gzip', 'X-Via': '1.1 wj29:0 (Cdn Cache Server V2.0), 1.1 PSlndlwtvb8:10 (Cdn Cache Server V2.0), 1.1 PSgdgzwt5yu38:1 (Cdn Cache Server V2.0)', 'Connection': 'keep-alive', 'X-Dscp-Value': '0'}
      <class 'requests.cookies.RequestsCookieJar'> <RequestsCookieJar[<Cookie locale=zh-CN for www.jianshu.com/>]>
      <class 'str'> https://www.jianshu.com/
      <class 'list'> [<Response [301]>]
      獲得的結果
    2. 狀態碼判斷

      import requests
       
      response4 = requests.get('http://www.baidu.com')
      
      exit() if not response4.status_code ==requests.codes.ok else print('Requst Successfully')
      #判斷響應的狀態碼,如果為200,打印“Request Sucessfully”,否則退出!

      另一種方式:

      import requests
       
      response4 = requests.get('http://www.baidu.com')
      exit() if not response4.status_code ==200 else print('Requst Successfully')
      #exit() if not response4.status_code ==requests.codes.ok else print('Requst Successfully')

      一些狀態碼對應的內容:

       1 100: ('continue',),
       2 101: ('switching_protocols',),
       3 102: ('processing',),
       4 103: ('checkpoint',),
       5 122: ('uri_too_long', 'request_uri_too_long'),
       6 200: ('ok', 'okay', 'all_ok', 'all_okay', 'all_good', '\o/', ''),
       7 201: ('created',),
       8 202: ('accepted',),
       9 203: ('non_authoritative_info', 'non_authoritative_information'),
      10 204: ('no_content',),
      11 205: ('reset_content', 'reset'),
      12 206: ('partial_content', 'partial'),
      13 207: ('multi_status', 'multiple_status', 'multi_stati', 'multiple_stati'),
      14 208: ('already_reported',),
      15 226: ('im_used',),
      16 
      17 Redirection.
      18 300: ('multiple_choices',),
      19 301: ('moved_permanently', 'moved', '\o-'),
      20 302: ('found',),
      21 303: ('see_other', 'other'),
      22 304: ('not_modified',),
      23 305: ('use_proxy',),
      24 306: ('switch_proxy',),
      25 307: ('temporary_redirect', 'temporary_moved', 'temporary'),
      26 308: ('permanent_redirect',
      27 'resume_incomplete', 'resume',), # These 2 to be removed in 3.0
      28 
      29 Client Error.
      30 400: ('bad_request', 'bad'),
      31 401: ('unauthorized',),
      32 402: ('payment_required', 'payment'),
      33 403: ('forbidden',),
      34 404: ('not_found', '-o-'),
      35 405: ('method_not_allowed', 'not_allowed'),
      36 406: ('not_acceptable',),
      37 407: ('proxy_authentication_required', 'proxy_auth', 'proxy_authentication'),
      38 408: ('request_timeout', 'timeout'),
      39 409: ('conflict',),
      40 410: ('gone',),
      41 411: ('length_required',),
      42 412: ('precondition_failed', 'precondition'),
      43 413: ('request_entity_too_large',),
      44 414: ('request_uri_too_large',),
      45 415: ('unsupported_media_type', 'unsupported_media', 'media_type'),
      46 416: ('requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'),
      47 417: ('expectation_failed',),
      48 418: ('im_a_teapot', 'teapot', 'i_am_a_teapot'),
      49 421: ('misdirected_request',),
      50 422: ('unprocessable_entity', 'unprocessable'),
      51 423: ('locked',),
      52 424: ('failed_dependency', 'dependency'),
      53 425: ('unordered_collection', 'unordered'),
      54 426: ('upgrade_required', 'upgrade'),
      55 428: ('precondition_required', 'precondition'),
      56 429: ('too_many_requests', 'too_many'),
      57 431: ('header_fields_too_large', 'fields_too_large'),
      58 444: ('no_response', 'none'),
      59 449: ('retry_with', 'retry'),
      60 450: ('blocked_by_windows_parental_controls', 'parental_controls'),
      61 451: ('unavailable_for_legal_reasons', 'legal_reasons'),
      62 499: ('client_closed_request',),
      63 
      64 Server Error.
      65 500: ('internal_server_error', 'server_error', '/o\', ''),
      66 501: ('not_implemented',),
      67 502: ('bad_gateway',),
      68 503: ('service_unavailable', 'unavailable'),
      69 504: ('gateway_timeout',),
      70 505: ('http_version_not_supported', 'http_version'),
      71 506: ('variant_also_negotiates',),
      72 507: ('insufficient_storage',),
      73 509: ('bandwidth_limit_exceeded', 'bandwidth'),
      74 510: ('not_extended',),
      75 511: ('network_authentication_required', 'network_auth', 'network_authentication'),
      一些狀態碼
        1 1.信息提示
        2 
        3    0代表本地響應成功
        4 
        5    100 - Continue 初始的請求已經接受,客戶應當繼續發送請求的其余部分
        6 
        7    101 - Switching Protocols 服務器將遵從客戶的請求轉換到另外一種協議
        8 
        9 2.請求成功
       10 
       11    200 - OK 一切正常,對GET和POST請求的應答文檔跟在后面
       12 
       13    201 - Created 服務器已經創建了文檔,Location頭給出了它的URL
       14 
       15    202 - Accepted 已經接受請求,但處理尚未完成
       16 
       17    203 - Non-Authoritative Information 文檔已經正常地返回,但一些應答頭可能不正確,因為使用的是文檔的拷貝,非權威性信息
       18 
       19    204 - No Content 沒有新文檔,瀏覽器應該繼續顯示原來的文檔。如果用戶定期地刷新頁面,而Servlet可以確定用戶文檔足夠新,這個狀態代碼是很有用的
       20 
       21    205 - Reset Content 沒有新的內容,但瀏覽器應該重置它所顯示的內容。用來強制瀏覽器清除表單輸入內容
       22 
       23    206 - Partial Content 客戶發送了一個帶有Range頭的GET請求,服務器完成了它
       24 
       25 3.重定向
       26 
       27    300 - Multiple Choices 客戶請求的文檔可以在多個位置找到,這些位置已經在返回的文檔內列出。如果服務器要提出優先選擇,則應該在Location應答頭指明。
       28 
       29    301 - Moved Permanently 客戶請求的文檔在其他地方,新的URL在Location頭中給出,瀏覽器應該自動地訪問新的URL。
       30 
       31     302 - Found 類似於301,但新的URL應該被視為臨時性的替代,而不是永久性的。注意,在HTTP1.0中對應的狀態信息是“Moved Temporatily”。出現該狀態代碼時,瀏覽器能夠自動訪問新的URL,因此它是一個很有用的狀態代碼。注意這個狀態代碼有時候可以和301替換使用。例如,如果瀏覽器錯誤地請求 http://host/~user (缺少了后面的斜杠),有的服務器返回301,有的則返回302。嚴格地說,我們只能假定只有當原來的請求是GET時瀏覽器才會自動重定向。請參見307。
       32 
       33     303 - See Other 類似於301/302,不同之處在於,如果原來的請求是POST,Location頭指定的重定向目標文檔應該通過GET提取(HTTP 1.1新)。
       34 
       35     304 - Not Modified 客戶端有緩沖的文檔並發出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩沖的文檔還可以繼續使用。
       36 
       37     305 - Use Proxy 客戶請求的文檔應該通過Location頭所指明的代理服務器提取 
       38 
       39     307 - Temporary Redirect 和302(Found)相同。許多瀏覽器會錯誤地響應302應答進行重定向,即使原來的請求是POST,即使它實際上只能在POST請求的應答是303時才能重定向。由於這個原因,HTTP 1.1新增了307,以便更加清除地區分幾個狀態代碼:當出現303應答時,瀏覽器可以跟隨重定向的GET和POST請求;如果是307應答,則瀏覽器只能跟隨對GET請求的重定向。 
       40 
       41 4.客戶端錯誤
       42 
       43    400 - Bad Request 請求出現語法錯誤。
       44 
       45    401 - Unauthorized 訪問被拒絕,客戶試圖未經授權訪問受密碼保護的頁面。應答中會包含一個WWW-Authenticate頭,瀏覽器據此顯示用戶名字/密碼對話框,然后在填寫合適的Authorization頭后再次發出請求。IIS 定義了許多不同的 401 錯誤,它們指明更為具體的錯誤原因。這些具體的錯誤代碼在瀏覽器中顯示,但不在 IIS 日志中顯示:
       46 
       47    401.1 - 登錄失敗。
       48 
       49    401.2 - 服務器配置導致登錄失敗。
       50 
       51    401.3 - 由於 ACL 對資源的限制而未獲得授權。
       52 
       53    401.4 - 篩選器授權失敗。
       54 
       55    401.5 - ISAPI/CGI 應用程序授權失敗。
       56 
       57    401.7 – 訪問被 Web 服務器上的 URL 授權策略拒絕。這個錯誤代碼為 IIS 6.0 所專用。
       58 
       59    403 - Forbidden 資源不可用。服務器理解客戶的請求,但拒絕處理它。通常由於服務器上文件或目錄的權限設置導致。禁止訪問:IIS 定義了許多不同的 403 錯誤,它們指明更為具體的錯誤原因:
       60 
       61    403.1 - 執行訪問被禁止。
       62 
       63    403.2 - 讀訪問被禁止。
       64 
       65    403.3 - 寫訪問被禁止。
       66 
       67    403.4 - 要求 SSL。
       68 
       69    403.5 - 要求 SSL 128 70 
       71    403.6 - IP 地址被拒絕。
       72 
       73    403.7 - 要求客戶端證書。
       74 
       75    403.8 - 站點訪問被拒絕。
       76 
       77    403.9 - 用戶數過多。
       78 
       79    403.10 - 配置無效。
       80 
       81    403.11 - 密碼更改。
       82 
       83    403.12 - 拒絕訪問映射表。
       84 
       85    403.13 - 客戶端證書被吊銷。
       86 
       87    403.14 - 拒絕目錄列表。
       88 
       89    403.15 - 超出客戶端訪問許可。
       90 
       91    403.16 - 客戶端證書不受信任或無效。
       92 
       93    403.17 - 客戶端證書已過期或尚未生效。
       94 
       95    403.18 - 在當前的應用程序池中不能執行所請求的 URL。這個錯誤代碼為 IIS 6.0 所專用。
       96 
       97    403.19 - 不能為這個應用程序池中的客戶端執行 CGI。這個錯誤代碼為 IIS 6.0 所專用。
       98 
       99    403.20 - Passport 登錄失敗。這個錯誤代碼為 IIS 6.0 所專用。
      100 
      101    404 - Not Found 無法找到指定位置的資源。這也是一個常用的應答
      102 
      103    404.0 -(無) – 沒有找到文件或目錄
      104 
      105    404.1 - 無法在所請求的端口上訪問 Web 站點
      106 
      107    404.2 - Web 服務擴展鎖定策略阻止本請求
      108 
      109    404.3 - MIME 映射策略阻止本請求
      110 
      111    405 - Method Not Allowed 請求方法(GET、POST、HEAD、DELETE、PUT、TRACE等)對指定的資源不適用,用來訪問本頁面的 HTTP 謂詞不被允許(方法不被允許)
      112 
      113    406 - Not Acceptable 指定的資源已經找到,但它的MIME類型和客戶在Accpet頭中所指定的不兼容,客戶端瀏覽器不接受所請求頁面的 MIME 類型
      114 
      115    407 - Proxy Authentication Required 要求進行代理身份驗證,類似於401,表示客戶必須先經過代理服務器的授權
      116 
      117    408 - Request Timeout 在服務器許可的等待時間內,客戶一直沒有發出任何請求。客戶可以在以后重復同一請求
      118 
      119    409 - Conflict 通常和PUT請求有關。由於請求和資源的當前狀態相沖突,因此請求不能成功。
      120 
      121    410 - Gone 所請求的文檔已經不再可用,而且服務器不知道應該重定向到哪一個地址。它和404的不同在於,返回407表示文檔永久地離開了指定的位置,而404表示由於未知的原因文檔不可用
      122 
      123    411 - Length Required 服務器不能處理請求,除非客戶發送一個Content-Length頭
      124 
      125    412 - Precondition Failed 請求頭中指定的一些前提條件失敗器認為自己能夠稍后再處理該請求,則應該提供一個Retry-After頭
      126 
      127    414 - Request URI Too Long URI太長
      128 
      129    415 – 不支持的媒體類型
      130 
      131    416 – Requested Range Not Satisfiable 服務器不能滿足客戶在請求中指定的Range頭
      132 
      133    417 – 執行失敗
      134 
      135    423 – 鎖定的錯誤
      136 
      137 5.服務器錯誤
      138 
      139    500 - Internal Server Error 服務器遇到了意料不到的情況,不能完成客戶的請求。
      140 
      141    500.12 - 應用程序正忙於在 Web 服務器上重新啟動。
      142 
      143    500.13 - Web 服務器太忙。
      144 
      145    500.15 - 不允許直接請求 Global.asa。
      146 
      147    500.16 – UNC 授權憑據不正確。這個錯誤代碼為 IIS 6.0 所專用。
      148 
      149    500.18 – URL 授權存儲不能打開。這個錯誤代碼為 IIS 6.0 所專用。
      150 
      151    500.100 - 內部 ASP 錯誤。
      152 
      153    501 - Not Implemented 服務器不支持實現請求所需要的功能,頁眉值指定了未實現的配置。例如,客戶發出了一個服務器不支持的PUT請求。
      154 
      155    502 - Bad Gateway 服務器作為網關或者代理時,為了完成請求訪問下一個服務器,但該服務器返回了非法的應答。 亦說Web 服務器用作網關或代理服務器時收到了無效響應。
      156 
      157    502.1 - CGI 應用程序超時。
      158 
      159    502.2 - CGI 應用程序出錯。
      160 
      161    503 - Service Unavailable 服務不可用,服務器由於維護或者負載過重未能應答。例如,Servlet可能在數據庫連接池已滿的情況下返回503。服務器返回503時可以提供一個Retry-After頭。這個錯誤代碼為 IIS 6.0 所專用。
      162 
      163    504 - Gateway Timeout 網關超時,由作為代理或網關的服務器使用,表示不能及時地從遠程服務器獲得應答。(HTTP 1.1新) 。
      164 
      165 · 505 - HTTP Version Not Supported 服務器不支持請求中所指明的HTTP版本。
      狀態碼解釋
  5.  高級操作

    1. 文件上傳

      file = {'file':open('favicon.ico','rb')}#將之前抓取的github圖標以二進制格式讀取
      
      response = requests.post('http://httpbin.org/post',files = file)
      print(response.text)

      獲取的內容:

      {
        "args": {}, 
        "data": "", 
        "files": {
          "file": "data:application/octet-stream;base64,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AAAAAAAAKysrBhYWGUcWFhiVFRUYvxUVGNkWFhfzFhYX8xUVGNkVFRi/FhYYlRYWGUcrKysGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
        }, 
        "form": {}, 
        "headers": {
          "Accept": "*/*", 
          "Accept-Encoding": "gzip, deflate", 
          "Connection": "close", 
          "Content-Length": "6665", 
          "Content-Type": "multipart/form-data; boundary=f955136a56ab4e4880a9e7de31f96a96", 
          "Host": "httpbin.org", 
          "User-Agent": "python-requests/2.18.4"
        }, 
        "json": null, 
        "origin": "112.91.182.26", 
        "url": "http://httpbin.org/post"
      }
      獲取的內容
    2. 獲取cookie

      import requests
       
      response = requests.get('http://www.baidu.com')
      #相比urllib,就不需要聲明任何變量print(response.cookies)
      print(response.cookies)
      for key,value in response.cookies.items():
          print(key + '=' + value)

      獲得的內容:

      <RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>
      BDORZ=27315
      獲得的內容
    3.  會話維持(一般用於模擬登陸)

      import requests
       
      requests.get('http://httpbin.org/cookies/set/number/123456789')#為網站的訪問設置cookie
      response = requests.get('http://httpbin.org/cookies')#與上面的行為時獨立的,所以獲取不到任何與cookie相關的信息
       
      print(response.text)
      {
        "cookies": {}
      }
      獲取的結果

      可以發現,我們傳入的cookie,然而並沒有獲取到,這是因為沒有確定是一個會話。解決方法如下:

      import requests
       
      s = requests.Session()#通過聲明Session對象,在使用這個對象發起兩次GET請求(相當於同一個瀏覽器發出來的請求)
      
      s.get('http://httpbin.org/cookies/set/number/123456789')
      response = s.get('http://httpbin.org/cookies')
      
      print(response.text)
      {
        "cookies": {
          "number": "123456789"
        }
      }
      獲得的結果
    4.  證書驗證

      import requests
      
      response = requests.get('https://www.12306.cn')
      print(response.status_code)  #因為這個網站的https證書,不是官方的,認為是偽證書,會報錯

      解決方法:

      import requests
      
      response = requests.get('https://www.12306.cn',verify=False)#設置參數解決
      print(response.status_code)

        或者:

      import requests
      #通過一下兩行代碼即可把警報消除,即使verify=False,報警還是存在的
      from requests.packages import urllib3
       
      urllib3.disable_warnings()
       
      #首先會檢測證書是否合法,通過verify就可以設置成False就可關閉錯誤提示
      response = requests.get('https://www.12306.cn',verify = False)
      print(response.status_code)
    5.  代理設置

      import requests
       
      proxies = {
          "http":"http://hk.tiyun.tk:4613",
          "https":"https://hk.tiyun.tk:4613"
      }
      response = requests.get('http://www.taobao.com',proxies = proxies)
       
      print(response.status_code)
      1. 有密碼的設置:

        import requests
         
        proxies = {
            "http":"http://user:password@hk.tiyun.tk:4613",
            "https":"https://user:password@hk.tiyun.tk:4613",
        }
         
        response = requests.get('http://www.taobao.com',proxies = proxies)
         
        print(response.status_code)
      2. socket代理設置

      3. 安裝
        pip install requests[socks]
      4. 使用
        import requests
         
        proxies = {
        'http':'socks5//127.0.0.1:1080/pac?auth=HgT2fpms98njlh9QGpsP&t=201803030916114202',
        'https':'socks5//127.0.0.1:1080/pac?auth=HgT2fpms98njlh9QGpsP&t=201803030916114202',
        }
         
        response = requests.get('http://www.taobao.com',proxies = proxies)
         
        print(response.status_code) 
    6.  超時設置

      #可以通過修改時間或是訪問國外網站,會出現ReaTimeout報警
      import requests
      from requests.exceptions import ReadTimeout
       
      try:
          response = requests.get('http://www.baidu.com',timeout = 0.1)
          print(response.status_code)
      except ReadTimeout:
          print('TIMEOUT'
    7.  認證設置(登錄驗證)

      import requests
      from requests.auth import HTTPBasicAuth
      #也可以是auth={'user','123'}以字典的形式傳入
      r = requests.get('http://120.27.34.24.9001',auth = HTTPBasicAuth('user','123'))
       
      print(r.status_cde)
    8. 異常處理(官方文檔

      import requests
      #首先先捕獲ReadTimeout,網絡不通捕獲ConnectionError,抓取異常捕獲RequestException
      from requests.exceptions import ReadTimeout,ConnectionError,RequestException
       
      try:
          response1 = requests.get('http://httpbin.org/get',timeout = 0.1)
          print(response.status_code)
      except ReadTimeout:
          print('TIMEOUUT')
      except ConnectionError:
          print('Connection Error')
      except RequestException:
          print('Error')


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM