這篇文章主要介紹了Python中opener()有什么用,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比鐵嶺網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式鐵嶺網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋鐵嶺地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。
當(dāng)我們爬取百度首頁的 html時,我們用到的是 urlopen 來打開請求,它是一個特殊的opener(也就是模塊幫我們構(gòu)建好的)。但是基本的 urlopen() 方法不支持代理、cookie等其他的HTTP/HTTPS高級功能,所以我們需要用到 Python 的 opener 來自定義我們的請求內(nèi)容。
具體步驟:
(1)使用相關(guān)的 Handler處理器 來創(chuàng)建特定功能的處理器對象;
(2)然后通過 build_opener()方法使用這些處理器對象,創(chuàng)建自定義opener對象;
(3)使用自定義的opener對象,調(diào)用open()方法發(fā)送請求。
我們先來回顧一下使用 urlopen 獲取百度首頁的 html 代碼實(shí)例:
# 導(dǎo)入urllib 庫 import urllib.request # url 作為Request()方法的參數(shù),構(gòu)造并返回一個Request對象 request = urllib.request.Request("http://www.baidu.com") # Request對象作為urlopen()方法的參數(shù),發(fā)送給服務(wù)器并接收響應(yīng) response = urllib.request.urlopen(request) # 類文件對象支持 文件對象的操作方法,如read()方法讀取文件全部內(nèi)容,返回字符串 html = response.read().decode("utf-8") # 打印字符串 print(html)
接下來我們看一下使用 opener 的處理方式:
from urllib import request # 構(gòu)建一個HTTPHandler 處理器對象,支持處理HTTP請求 http_handler = request.HTTPHandler() # 構(gòu)建一個HTTPSHandler 處理器對象,支持處理HTTPS請求 # http_handler = request.HTTPSHandler() # 調(diào)用 request.build_opener()方法,創(chuàng)建支持處理HTTP請求的opener對象 opener = request.build_opener(http_handler) # 構(gòu)建 Request請求 request = request.Request("http://www.baidu.com/") # 調(diào)用自定義opener對象的open()方法,發(fā)送request請求 response = opener.open(request) # 獲取服務(wù)器響應(yīng)內(nèi)容 html = response.read().decode("utf-8") # 打印字符串 print(html)
在上面的第一段代碼中,我們是通過直接 import urllib.request 來導(dǎo)入我們需要的包,這樣當(dāng)我們要使用時需要 urllib.request 來使用,第二段代碼我們是通過 from urllib import request 來導(dǎo)入我們需要的包,這樣當(dāng)我們使用時直接 request 來使用就可以了。
第一段代碼在前面的文章中我們已經(jīng)說過了,這里就不多做解釋了。
第二段代碼中,我們使用了 opener 的方法來處理我們的請求,這樣我們就可以對代理,cookie 等做進(jìn)一步的操作,后續(xù)文章會講到。最終結(jié)果如下:
在http_handler = request.HTTPHandler()中,我們還可以添加一個 debuglevel=1 參數(shù),會將Debug Log打開,這樣程序在執(zhí)行的時候,會把收包和發(fā)包的報(bào)頭在屏幕上自動打印出來,方便調(diào)試,有時可以省去抓包的工作。
代碼如下:
from urllib import request # 構(gòu)建一個HTTPHandler 處理器對象,支持處理HTTP請求 http_handler = request.HTTPHandler(debuglevel=1) # 構(gòu)建一個HTTPHandler 處理器對象,支持處理HTTPS請求 # http_handler = request.HTTPSHandler(debuglevel=1) # 調(diào)用 request.build_opener()方法,創(chuàng)建支持處理HTTP請求的opener對象 opener = request.build_opener(http_handler) # 構(gòu)建 Request請求 request = request.Request("http://www.baidu.com/") # 調(diào)用自定義opener對象的open()方法,發(fā)送request請求 response = opener.open(request) # 獲取服務(wù)器響應(yīng)內(nèi)容 html = response.read().decode("utf-8") # 打印字符串 print(html)
輸出結(jié)果如下:
可以看出在響應(yīng)結(jié)果的時候會為我們打印輸出一些請求信息。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享Python中opener()有什么用內(nèi)容對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來學(xué)習(xí)!