开心六月综合激情婷婷|欧美精品成人动漫二区|国产中文字幕综合色|亚洲人在线成视频

    1. 
      
        <b id="zqfy3"><legend id="zqfy3"><fieldset id="zqfy3"></fieldset></legend></b>
          <ul id="zqfy3"></ul>
          <blockquote id="zqfy3"><strong id="zqfy3"><dfn id="zqfy3"></dfn></strong></blockquote>
          <blockquote id="zqfy3"><legend id="zqfy3"></legend></blockquote>
          打開APP
          userphoto
          未登錄

          開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

          開通VIP
          詳解:Python2中的urllib、urllib2與Python3中的urllib以及第三方模塊requests

          先說說Python2中的url與urllib2(參考此處):


          在python2中,urlliburllib2都是接受URL請求的相關(guān)模塊,但是提供了不同的功能。兩個(gè)最顯著的不同如下:

          1、urllib2可以接受一個(gè)Request類的實(shí)例來設(shè)置URL請求的headers,例如:

          [python] view plain copy
          1. req = urllib2.Request(  
          [python] view plain copy
          1.         url=url,  
          2.         data=postdata,  
          3.         headers=headers  
          4. )  
          5. result = urllib2.urlopen(req)  


          我們知道,HTTP是無連接的狀態(tài)協(xié)議,但是客戶端和服務(wù)器端需要保持一些相互信息,比如cookie,有了cookie,服務(wù)器才能知道剛才是這個(gè)用戶登錄了網(wǎng)站,才會(huì)給予客戶端訪問一些頁面的權(quán)限。所以我們需要保存cookie,之后附帶cookie再來訪問網(wǎng)站,才能夠達(dá)到效果。這里就需要Python的cookielib和urllib2等的配合,將cookielib綁定到urllib2在一起,就能夠在請求網(wǎng)頁的時(shí)候附帶cookie。在構(gòu)造req請求之前可以獲取一個(gè)保存cookies的對象,并把該對象和http處理器、http的handler資源以及urllib2的對象綁定在一起:

          [python] view plain copy
          1. cj = cookielib.LWPCookieJar()  
          2. cookie_support = urllib2.HTTPCookieProcessor(cj)  
          3. # 創(chuàng)建一個(gè)opener,將保存了cookie的http處理器,還有設(shè)置一個(gè)handler用于處理http的URL的打開  
          4. opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)  
          5. # 將包含了cookie、http處理器、http的handler的資源和urllib2對象板頂在一起  
          6. urllib2.install_opener(opener)  


          2、urllib僅可以接受URL。這意味著,你不可以偽裝你的User Agent字符串等。

          但是urllib提供urlencode方法用來GET查詢字符串的產(chǎn)生,而urllib2沒有。這是就是為何urllib常和urllib2一起使用的原因,如下:

          [python] view plain copy
          1. postdata = urllib.urlencode(postdata)  


          (把字典形式的postdata編碼一下)
          Tip: if you are planning to do HTTP stuff only, check out httplib2, it is much better than httplib or urllib or urllib2.


          》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

          下面說說Python3x中的urllib包、http包以及其他比較好使的第三方包

          1、Python3 urllib、http

          Python3不像2x中酷虎的和服務(wù)器模塊結(jié)構(gòu)散亂,Python3中把這些打包成為了2個(gè)包,就是http與urllib,詳解如下:

          http會(huì)處理所有客戶端--服務(wù)器http請求的具體細(xì)節(jié),其中:

          (1)client會(huì)處理客戶端的部分

          (2)server會(huì)協(xié)助你編寫Python web服務(wù)器程序

          (3)cookies和cookiejar會(huì)處理cookie,cookie可以在請求中存儲(chǔ)數(shù)據(jù)

          使用cookiejar示例可以在前幾篇博客中基于Python3的爬蟲中找到示例,如下:

          [python] view plain copy
          1. import http.cookiejar  
          2. import urllib.request  
          3. import urllib.parse</span></span>  
          4. def getOpener(head):  
          5.     # deal with the Cookies  
          6.     cj = http.cookiejar.CookieJar()  
          7.     pro = urllib.request.HTTPCookieProcessor(cj)  
          8.     opener = urllib.request.build_opener(pro)  
          9.     header = []  
          10.     for key, value in head.items():  
          11.         elem = (key, value)  
          12.         header.append(elem)  
          13.     opener.addheaders = header  
          14.     return opener  


          urllib是基于http的高層庫,它有以下三個(gè)主要功能:

          (1)request處理客戶端的請求

          (2)response處理服務(wù)端的響應(yīng)

          (3)parse會(huì)解析url

          下面是使用Python3中urllib來獲取資源的一些示例:

          [python] view plain copy
          1. 1、最簡單  
          2. import urllib.request  
          3. response = urllib.request.urlopen('http://python.org/')  
          4. html = response.read()  
          [python] view plain copy
          1. 2、使用 Request  
          2. import urllib.request  
          3. req = urllib.request.Request('http://python.org/')  
          4. response = urllib.request.urlopen(req)  
          5. the_page = response.read()  
          [python] view plain copy
          1. 3、發(fā)送數(shù)據(jù)  
          2. import urllib.parse  
          3. import urllib.request  
          4. url = '"  
          5. values = {  
          6. 'act' : 'login',  
          7. 'login[email]' : '',  
          8. 'login[password]' : ''  
          9. }  
          10. data = urllib.parse.urlencode(values)  
          11. req = urllib.request.Request(url, data)  
          12. req.add_header('Referer', 'http://www.python.org/')  
          13. response = urllib.request.urlopen(req)  
          14. the_page = response.read()  
          15. print(the_page.decode("utf8"))  
          [python] view plain copy
          1. 4、發(fā)送數(shù)據(jù)和header  
          2. import urllib.parse  
          3. import urllib.request  
          4. url = ''  
          5. user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'  
          6. values = {  
          7. 'act' : 'login',  
          8. 'login[email]' : '',  
          9. 'login[password]' : ''  
          10. }  
          11. headers = { 'User-Agent' : user_agent }  
          12. data = urllib.parse.urlencode(values)  
          13. req = urllib.request.Request(url, data, headers)  
          14. response = urllib.request.urlopen(req)  
          15. the_page = response.read()  
          16. print(the_page.decode("utf8"))  
          [python] view plain copy
          1. 5、http 錯(cuò)誤  
          2. import urllib.request  
          3. req = urllib.request.Request(' ')  
          4. try:  
          5. urllib.request.urlopen(req)  
          6. except urllib.error.HTTPError as e:  
          7. print(e.code)  
          8. print(e.read().decode("utf8"))  
          [python] view plain copy
          1. 6、異常處理1  
          2. from urllib.request import Request, urlopen  
          3. from urllib.error import URLError, HTTPError  
          4. req = Request("http://www..net /")  
          5. try:  
          6. response = urlopen(req)  
          7. except HTTPError as e:  
          8. print('The server couldn't fulfill the request.')  
          9. print('Error code: ', e.code)  
          10. except URLError as e:  
          11. print('We failed to reach a server.')  
          12. print('Reason: ', e.reason)  
          13. else:  
          14. print("good!")  
          15. print(response.read().decode("utf8"))  
          [python] view plain copy
          1. 7、異常處理2  
          2. from urllib.request import Request, urlopen  
          3. from urllib.error import  URLError  
          4. req = Request("http://www.Python.org/")  
          5. try:  
          6. response = urlopen(req)  
          7. except URLError as e:  
          8. if hasattr(e, 'reason'):  
          9. print('We failed to reach a server.')  
          10. print('Reason: ', e.reason)  
          11. elif hasattr(e, 'code'):  
          12. print('The server couldn't fulfill the request.')  
          13. print('Error code: ', e.code)  
          14. else:  
          15. print("good!")  
          16. print(response.read().decode("utf8"))  
          [python] view plain copy
          1.   
          [python] view plain copy
          1. 8、HTTP 認(rèn)證  
          2. import urllib.request  
          3. # create a password manager  
          4. password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()  
          5. # Add the username and password.  
          6. # If we knew the realm, we could use it instead of None.  
          7. top_level_url = ""  
          8. password_mgr.add_password(None, top_level_url, 'rekfan', 'xxxxxx')  
          9. handler = urllib.request.HTTPBasicAuthHandler(password_mgr)  
          10. # create "opener" (OpenerDirector instance)  
          11. opener = urllib.request.build_opener(handler)  
          12. # use the opener to fetch a URL  
          13. a_url = ""  
          14. x = opener.open(a_url)  
          15. print(x.read())  
          16. # Install the opener.  
          17. # Now all calls to urllib.request.urlopen use our opener.  
          18. urllib.request.install_opener(opener)  
          19. a = urllib.request.urlopen(a_url).read().decode('utf8')  
          20. print(a)  
          [python] view plain copy
          1.   
          [python] view plain copy
          1. 9、使用代理  
          2. import urllib.request  
          3. proxy_support = urllib.request.ProxyHandler({'sock5': 'localhost:1080'})  
          4. opener = urllib.request.build_opener(proxy_support)  
          5. urllib.request.install_opener(opener)  
          6. a = urllib.request.urlopen("").read().decode("utf8")  
          7. print(a)  
          [python] view plain copy
          1. 10、超時(shí)  
          2. import socket  
          3. import urllib.request  
          4. # timeout in seconds  
          5. timeout = 2  
          6. socket.setdefaulttimeout(timeout)  
          7. # this call to urllib.request.urlopen now uses the default timeout  
          8. # we have set in the socket module  
          9. req = urllib.request.Request('')  
          10. a = urllib.request.urlopen(req).read()  
          11. print(a)  

          上面例子大概把常用的一些情況都羅列出來了,其中對異常的處理要嚴(yán)格按照:

          try...exceptA...exceptB...except...else...finally...

          的語法格式來寫,詳情請參考我的另一篇相關(guān)博文

          》》》》》》》》》》》》》》》》》》》》》》》》

          2、除了使用官方標(biāo)準(zhǔn)庫的urllib,我們可以使用更好用的第三方模塊,如requests

          Requests 完全滿足如今網(wǎng)絡(luò)的需求,其功能有以下:

          • 國際化域名和 URLs
          • Keep-Alive & 連接池
          • 持久的 Cookie 會(huì)話
          • 類瀏覽器式的 SSL 加密認(rèn)證
          • 基本/摘要式的身份認(rèn)證
          • 優(yōu)雅的鍵/值 Cookies
          • 自動(dòng)解壓
          • Unicode 編碼的響應(yīng)體
          • 多段文件上傳
          • 連接超時(shí)
          • 支持 .netrc
          • 適用于 Python 2.6—3.4
          • 線程安全

          請參考中文官方文檔,寫的非常詳細(xì):傳送門     

          其中快速上手頁面寫的非常棒,我就不贅述了,請看:傳送門

          正如介紹所說:Requests 是使用 Apache2 Licensed 許可證的 HTTP 庫。用 Python 編寫,真正的為人類著想。





          本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
          打開APP,閱讀全文并永久保存 查看更多類似文章
          猜你喜歡
          類似文章
          Python:requests的基本應(yīng)用
          一行 Python 代碼實(shí)現(xiàn)并行,騷技能!
          python爬蟲實(shí)踐之網(wǎng)頁抓取 | IT癮
          Python
          專欄:Python爬蟲入門教程
          Python3網(wǎng)絡(luò)爬蟲(一):利用urllib進(jìn)行簡單的網(wǎng)頁抓取
          更多類似文章 >>
          生活服務(wù)
          分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
          綁定賬號(hào)成功
          后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
          如果VIP功能使用有故障,
          可點(diǎn)擊這里聯(lián)系客服!

          聯(lián)系客服