Http請求的Python實現

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

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

  一、實現完整的請求響應模型
     (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)

   二、響應與編碼「:
         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頭猜想的網頁編碼格式

  三、請求頭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))

  四、響應碼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
五、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)

六、重定向和歷史信息:處理重定向只是須要設置一下 allow_redirects字段便可,將 allow_redirects設置爲True,則容許重定向;設置爲False,則禁止重定向。若是容許重定向,則能夠經過r.history字段查看歷史信息
七、超時設置:經過參數timeout來進行設置
八、代理設置:使用代理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)html

相關文章
相關標籤/搜索