python-45: opener 的使用

上一小節講了cookielib 的使用,不知道你們仔細看了沒有,爲了便於分析,我這裏引用上一節的一段代碼php

import urllib2
import cookielib
#聲明一個CookieJar對象實例來保存cookie
cookie = cookielib.CookieJar()
#利用urllib2庫的HTTPCookieProcessor對象來建立cookie處理器
handler=urllib2.HTTPCookieProcessor(cookie)
#經過handler來構建opener
opener = urllib2.build_opener(handler)
#此處的open方法同urllib2的urlopen方法,也能夠傳入request
response = opener.open('http://www.baidu.com')
for item in cookie:
    print 'Name = '+item.name
    print 'Value = '+item.value

其實上一節的三段代碼很好理解,只要你認真的去看而後找出他們的規律,這裏我給你們簡單的說一下python

  1. 前兩句是引入模塊的操做,只要記住須要什麼模塊就行
    cookie

  2. cookie = cookielib.CookieJar() 前面說了CookieJar用來保存cookies到變量中函數

  3. handler=urllib2.HTTPCookieProcessor(cookie)
    opener = urllib2.build_opener(handler)
    response = opener.open('http://www.baidu.com')測試

        這三句話每段程序裏面都有ui

    4. 剩下來的就是對數據的各類操做,包括輸出,保存,載入等等url

一、二、4 都很容易,因此咱們只要重點分析 3 就好,其實 3 也就是這一小節的重點, opener的使用.net

咱們先來看帶有網址的 response = opener.open('http://www.baidu.com'),是否是跟咱們前面的某段代碼很像呢,如今我把這段代碼貼出來看看
response = urllib2.urlopen('http://www.baidu.com')
咱們知道urllib2.urlopen的做用是打開一個網址,那麼相似的,opener.open是否是也能夠打開一個網址呢?咱們能夠編寫代碼來測試看看,可是在編寫以前我又認真的看了這三句話,第一句我不知道是什麼意思,暫且無論,第二句我原本也不知道的,可是我看到 build_opener 這個單詞,build不就是構建,建造的意思嗎?並且 opener也是執行這一句以後得來的,這是否是說,要完成整個的功能,我至少須要用到這兩句話,因而我測試了下面的代碼:
code

#!/uer/bin/env python
# -*- coding: UTF-8 -*-
__author__ = '217小月月坑'
'''
測試opener.open功能
'''

import urllib2

opener = urllib2.build_opener()
response = opener.open("http://www.lvye.org/userinfo.php?uid=409557")
print response.read()

OK,有輸出,這說明了opener.open就是打開一個網址的操做,可是urlopen和opener.open 有什麼區別呢?
1. urlopen是opener.open中的一種,是最簡單的opener.open
2. 基本的urlopen()函數不支持驗證、cookie或其餘HTTP高級功能,要支持這些功能,必須使用opener
3. build_opener()函數來建立本身的自定義Opener對象
對象

關於build_opener()函數的更多信息,能夠看下面這張圖片(本圖出自現代魔法學院:http://www.nowamagic.net/academy/detail/1302879

結合咱們最近講的內容,咱們來看看要建立一個能夠處理cookies的opener應該怎麼作呢
從圖上咱們能夠看出,要給opener增長處理cookies的功能,咱們須要使用到 HTTPCookieProcessor 的處理程序,咱們試着來寫一下

opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
response = opener.open('http://www.baidu.com')

咱們再給程序變變形:

handler=urllib2.HTTPCookieProcessor(cookie)
opener = urllib2.build_opener(handler)
response = opener.open('http://www.baidu.com')

這不就是前面說的3句話嗎

有了這三句話的理解,咱們再加上前面說的cookielib模塊裏面相應的類的功能,前面使用cookielib的例子就很好記下來了

相關文章
相關標籤/搜索