python中的urllib库_七、urllib库(一)
python2中,有urllib和urllib2兩個庫,在python3中統一為urllib庫
它是python內置的HTTP請求庫,包含了4個模塊:
request:最基本的HTTP請求模塊,用來模擬發送請求,就行瀏覽器傳入URL一樣,給庫方法傳入URL和額外的參數就可以實現
error:異常處理模塊,如果出現請求錯誤,可以捕獲這些異常,然后進行操作,保證程序不會以為終止
parse:工具模塊,提供了URL處理方法,比如拆分、解析、合并
robotparser:主要用來識別網站的robots.txt文件,然后判斷哪些網站可以爬,哪些不可爬
官方文檔:
https://docs.python.org/3/library/urllib.request.html
發送請求:
urllib.request模塊:
1、urlopen()
urllib.request模塊最基本的構造HTTP請求方法,可以模擬瀏覽器一個請求發起的過程,還帶有處理授權驗證、重定向、瀏覽器Cookies和其他內容
抓取python官網
查看返回的類型
是一個HTTPResponse類型,主要包含方法:
read()
readinto()
getheader(name)
getheaders()
fileno()
主要包含屬性:
msg
version
status
reason
debuglevel
closed
urlopen()參數
urllib.request.urlopen(url , data=None , [timeout , ]* , cafile=None , capath=None , catefault=False , context=None)
data參數
data是可選參數,bytes類型,如果不是就需要通過bytes()方法轉化,如果穿了data參數,那么請求方式就是POST,反之就是GET
bytes()方法的第一個參數需要是字符串類型,使用urllib.parse.urlencode()方法將參數字典轉換成字符串;第二個參數是指點編碼格式
結果看到傳的參數在form字段,表示模擬表單方式,以POST方式傳輸
timeout參數
用戶設置超時時間,單位是秒,如果請求超過這個時間還沒有響應,就拋出異常
超時的話會拋出超時
捕獲異常
context:必須是ssl.SSLContext類型,用于指點SSL設置
cafile、capath:指定CA證書和它的路徑
cadefault:默認是false,已經棄用
Request參數
發送請求依然使用urlopen()方法,只不過參數使用Request類型的對象
urllib.request.Request(url , data=None , headers={} , origin_req_host=None , unverifiable=flase , method=None)
url:請求的URL,必傳
data:必須是bytes類型,如果是字典,先用rullib.parse模塊里的 urlencode()編碼
headers:請求頭,字典形式,可以在參數直接構造,也可以通過調用add_header()方法添加
origin_req_host:請求方的host名或者IP地址
unverifiable:默認是flase,表示請求是否是無法驗證的,也就是用戶有沒有權限來接收這個請求的結果
method:字符串形式,指定請求的方式
高級用法Handler
urllib.request中的BaseHandler類,是其他所有Handler的父類,提供了最基本的方法,defult_open()、protocol_request()等
各種繼承這個BaseHandler父類的Handler子類:
HTTPDefaultErrorHandler:用于處理HTTP響應錯誤,錯誤都會拋出HTTPError類型的異常
HTTPRedirectHandler:處理重定向
HTTPCookieProcessor:處理Cookies
ProxyHandler:設置代理,默認代理為空
HTTPPasswordMgr:管理密碼,維護了用戶名和密碼的表
HTTPBasicAuthHandler:管理認證,如果打開鏈接需要認證,用它可以解決
還有其他類,查看所有的官方文檔:
httos://docs.python.org/3/library/urllib.request.html#urllib.request.BaseHandler
OpenerDirector類
簡稱Opener,urlopen()方法就是urllib提供的一個Opener
Request和urlopen相當于類庫為我們封裝了常用的一些方法,利用這些可以完成基本的請求,想要完成更高級的功能,需要使用更底層的實例完成,就用到了Opener
Opener可以使用open()方法,和urlopen()一樣
利用Handler來構建Opener
實例:
1、驗證
例如打開網站時彈框提示登錄,登錄后才可以查看頁面
實例化HTTPPasswordMgrWithDefaultRealm對象,它利用add_password()添加用戶名密碼,這樣就建立了一個處理驗證的Handler
利用這個Handler使用build_opener()方法構建一個Opener,這個Opener在方式請求時就相當于已經驗證成功了
然后Opener利用open()方法打開連接就可以完成驗證,獲取到的就是驗證后的頁面源代碼
2、代理
爬蟲免不了做代理,添加代理
使用ProxyHandler,參數是一個字典,鍵名是協議類型,如:HTTP或者HTTPS,值是代理鏈接,可以添加多個代理
然后利用這個Handler及build_opener()方法構造一個Opener,之后發送請求
3、Cookies
將網站的Cookies獲取下來,打印
首先聲明一個CookieJar對象,然后利用HTTPCookieProcessor來構建一個Handler,最后利用build_opener()方法構建出Opener,執行open()方法
輸出成文件格式
CookieJar換成MozillaCookieJar,生成文件時用,是CookieJar的子類,用來處理Cookie和文件相關的事,比如讀取、保存,可以將Cookie保存成Mozilla型瀏覽器的Cookie形式
LWPCookieJar同樣可以讀取和保存Cookie,但是保存的格式和MozillaCookieJar不一樣,它會保存成libwww-perl(LWP)格式的Cookie文件
讀取并使用Cookie
lod()方法用來讀取本地Cookie文件,獲取內容,然后構建Handler和Opener完成操作
官方文檔:
https://docs.python.org/3/library/urllib.request.html#basehandler-objects
總結
以上是生活随笔為你收集整理的python中的urllib库_七、urllib库(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unity win7 全屏 输入法没有显
- 下一篇: verilog case语句_浅谈Des