Http請求的Python實現


一、urllib實現: urllib是Python中的內置模塊
    實現一個完整的請求與響應模型:urllib提供一個基礎函數urlopen,通過向指定的url發出請求來獲取數據。
          import urllib.request
           response = urllib.request.urlopen('http://www.zhihu.com')
           html = response.read()
           print(html)
二、httplib/urllib實現: httplib模塊是一個底層基礎模塊,可以看到建立http請求的每一步,但是實現的功能比較少,在Python爬蟲開發中基本上用不到。

三、Requests實現:是Python爬蟲開發中最為常用的方式。Requests庫是第三方模塊,需要額外進行安裝
                  pip3   install   requests

  1、實現完整的請求響應模型
     (1)get方式:
             import requests
                 r = requests.get('http://www.baidu.com')
                 print(r.text)
      (2)post方式:
             import requests
                 r = requests.post('http://www.baidu.com',data={‘key’:’value’})
                 print(r.text)

   2、響應與編碼“:
         import requests
             r = requests.get('http://www.baidu.com')
             print('content----->'+str(r.content))
             print('text----->'+r.text)
             print('encoding----->'+r.encoding)
              r.encoding = 'utf-8'
              print('text----→'+r.text)

r.content:返回的是字節形式
r.text:返回的是文本形式
r.encoding:返回的是根據HTTP頭猜測的網頁編碼格式

  3、請求頭headers處理:在Requests的get函數中添加headers參數即可
    import requests
     user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
     headers = {'User-Agent':user_agent}
     r = requests.get('http://www.baidu.com',headers=headers)
     print('content----→'+str(r.content))

  4、響應碼code和響應頭headers處理
      import requests
        user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
        headers = {'User-Agent':user_agent}
        r = requests.get('http://www.baidu.com',headers=headers)

       if r.status_code == requests.codes.ok:
             print(r.status_code) #響應碼
             print(r.headers) #響應頭
             print(r.headers.get('content-type'))#獲取響應頭的某個字段(推薦)
       else:
              r.raise_for_status()
注意:raise_for_status()函數是用來主動地產生一個異常,當響應碼是4XX或5XX時,raise_for_status()函數會拋出異常,而響應碼為200時,raise_for_status()函數返回None
5、Cookie處理:
   (1)若響應中包含Cookie的值:
         import requests
            user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
            headers = {'User-Agent':user_agent}
            r = requests.get('http://www.baidu.com',headers=headers)
            for cookie in r.cookies.keys():
                     print(cookie+':'+r.cookies.get(cookie))

     (2)自定義Cookie值發送出去:
               import requests
               user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5;windows NT'
               headers = {'User-Agent':user_agent}
               cookies = dict(name='maomi',age='3')
               r = requests.get('http://www.baidu.com',headers=headers,cookies=cookies)
               print(r.text)

      (3)自動處理Cookie:不需要關心Cookie的值,只希望每次訪問時,程序自動把Cookie帶上
        import requests
        loginUrl = 'http://www.sina.com/login'
        s = requests.Session()
       #首先訪問登錄界面,作為游客,服務器會先分配一個cookie
        r = s.get(loginUrl,allow_redirects=True)
        datas = {'name':'maomi','passwd':'maomi'}
        #向登錄鏈接發送post請求,驗證成功,游客權限轉為會員權限
        r = s.post(loginUrl,data=datas,allow_redirects=True)
         print(r.text)

6、重定向和歷史信息:處理重定向只是需要設置一下 allow_redirects字段即可,將 allow_redirects設置為True,則允許重定向;設置為False,則禁止重定向。如果允許重定向,則可以通過r.history字段查看歷史信息
7、超時設置:通過參數timeout來進行設置
8、代理設置:使用代理Proxy,可以為任意請求方法通過設置proxies參數來配置單個請求
          import requests
              proxies = {
                       "http":"http://0.10.1.10:3318",
                       "https":"http://10.10.1.10:1080"
                }
             requests.get("http://example.org",proxies=proxies)


免責聲明!

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



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