您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python中opener()有什么用,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。
當我們爬取百度首頁的 html時,我們用到的是 urlopen 來打開請求,它是一個特殊的opener(也就是模塊幫我們構建好的)。但是基本的 urlopen() 方法不支持代理、cookie等其他的HTTP/HTTPS高級功能,所以我們需要用到 Python 的 opener 來自定義我們的請求內容。
具體步驟:
(1)使用相關的 Handler處理器 來創建特定功能的處理器對象;
(2)然后通過 build_opener()方法使用這些處理器對象,創建自定義opener對象;
(3)使用自定義的opener對象,調用open()方法發送請求。
我們先來回顧一下使用 urlopen 獲取百度首頁的 html 代碼實例:
# 導入urllib 庫 import urllib.request # url 作為Request()方法的參數,構造并返回一個Request對象 request = urllib.request.Request("http://www.baidu.com") # Request對象作為urlopen()方法的參數,發送給服務器并接收響應 response = urllib.request.urlopen(request) # 類文件對象支持 文件對象的操作方法,如read()方法讀取文件全部內容,返回字符串 html = response.read().decode("utf-8") # 打印字符串 print(html)
接下來我們看一下使用 opener 的處理方式:
from urllib import request # 構建一個HTTPHandler 處理器對象,支持處理HTTP請求 http_handler = request.HTTPHandler() # 構建一個HTTPSHandler 處理器對象,支持處理HTTPS請求 # http_handler = request.HTTPSHandler() # 調用 request.build_opener()方法,創建支持處理HTTP請求的opener對象 opener = request.build_opener(http_handler) # 構建 Request請求 request = request.Request("http://www.baidu.com/") # 調用自定義opener對象的open()方法,發送request請求 response = opener.open(request) # 獲取服務器響應內容 html = response.read().decode("utf-8") # 打印字符串 print(html)
在上面的第一段代碼中,我們是通過直接 import urllib.request 來導入我們需要的包,這樣當我們要使用時需要 urllib.request 來使用,第二段代碼我們是通過 from urllib import request 來導入我們需要的包,這樣當我們使用時直接 request 來使用就可以了。
第一段代碼在前面的文章中我們已經說過了,這里就不多做解釋了。
第二段代碼中,我們使用了 opener 的方法來處理我們的請求,這樣我們就可以對代理,cookie 等做進一步的操作,后續文章會講到。最終結果如下:
在http_handler = request.HTTPHandler()中,我們還可以添加一個 debuglevel=1 參數,會將Debug Log打開,這樣程序在執行的時候,會把收包和發包的報頭在屏幕上自動打印出來,方便調試,有時可以省去抓包的工作。
代碼如下:
from urllib import request # 構建一個HTTPHandler 處理器對象,支持處理HTTP請求 http_handler = request.HTTPHandler(debuglevel=1) # 構建一個HTTPHandler 處理器對象,支持處理HTTPS請求 # http_handler = request.HTTPSHandler(debuglevel=1) # 調用 request.build_opener()方法,創建支持處理HTTP請求的opener對象 opener = request.build_opener(http_handler) # 構建 Request請求 request = request.Request("http://www.baidu.com/") # 調用自定義opener對象的open()方法,發送request請求 response = opener.open(request) # 獲取服務器響應內容 html = response.read().decode("utf-8") # 打印字符串 print(html)
輸出結果如下:
可以看出在響應結果的時候會為我們打印輸出一些請求信息。
感謝你能夠認真閱讀完這篇文章,希望小編分享Python中opener()有什么用內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。