<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0
    sgmllib.py 包含一個重要的類: SGMLParserSGMLParserHTML 分解成有用的片段,比如開始標記和結束標記。一旦它成功地分解出某個數據為一個有用的片段,它會根據所發現的數據,調用一個自身內部的方法。為了使用這個分析器,您需要子類化 SGMLParser 類,并且覆蓋這些方法。
    SGMLParserHTML 分析成 8 類數據,然后對每一類調用單獨的方法:
    開始標記 (Start tag)
    是一個開始一個塊的 HTML 標記,象 <html><head><body><pre> 等,或是一個獨一的標記,象 <br><img> 等。當它找到一個開始標記 tagnameSGMLParser 將查找名為 start_tagnamedo_tagname 的方法。例如,當它找到一個 <pre> 標記,它將查找一個 start_predo_pre 的方法。如果找到了,SGMLParser 會使用這個標記的屬性列表來調用這個方法;否則,它用這個標記的名字和屬性列表來調用 unknown_starttag 方法。
    結束標記 (End tag)
    是結束一個塊的 HTML 標記,象 </html></head></body></pre> 等。當找到一個結束標記時,SGMLParser 將查找名為 end_tagname 的方法。如果找到,SGMLParser 調用這個方法,否則它使用標記的名字來調用 unknown_endtag
    字符引用 (Character reference)
    用字符的十進制或等同的十六進制來表示的轉義字符,象  。當找到,SGMLParser 使用十進制或等同的十六進制字符文本來調用 handle_charref
    實體引用 (Entity reference)
    HTML 實體,象 &copy;。當找到,SGMLParser 使用 HTML 實體的名字來調用 handle_entityref
    注釋 (Comment)
    HTML 注釋, 包括在 <!-- ... -->之間。當找到,SGMLParser 用注釋內容來調用 handle_comment
    處理指令 (Processing instruction)
    HTML 處理指令,包括在 <? ... > 之間。當找到,SGMLParser 用處理指令內容來調用 handle_pi
    聲明 (Declaration)
    HTML 聲明,如 DOCTYPE,包括在 <! ... >之間。當找到,SGMLParser 用聲明內容來調用 handle_decl
    文本數據 (Text data)
    文本塊。不滿足其它 7 種類別的任何東西。當找到,SGMLParser 用文本來調用 handle_data

    urllib 模塊是標準 Python 庫的一部分。它包含了一些函數,可以從基于互聯網的 URL (主要指網頁) 來獲取信息并且真正取回數據。urllib 模塊最簡單的使用是提取用 urlopen 函數取回的網頁的整個文本。打開一個 URL打開一個文件相似。urlopen 的返回值是象文件一樣的對象,它具有一個文件對象一樣的方法。使用由 urlopen 所返回的類文件對象所能做的最簡單的事情就是 read,它可以將網頁的整個 HTML 讀到一個字符串中。這個對象也支持 readlines 方法,這個方法可以將文本按行放入一個列表中。當用完這個對象,要確保將它 close,就如同一個普通的文件對象。

     urllister.py

    from sgmllib import SGMLParser

    class URLLister(SGMLParser):
        def reset(self):
            SGMLParser.reset(self)
            self.urls=[]
            self.imgs=[]
        def start_a(self, attrs):
            href = [v for k, v in attrs if k=='href']
            if href:
                self.urls.extend(href)
        def start_img(self, attrs):
            img = [v for k, v in attrs if k=='src']
            if img:
                self.imgs.extend(img)

    1.resetSGMLParser__init__ 方法來調用,也可以在創建一個分析器實例時手工來調用。所以如果您需要做初始化,在 reset 中去做,而不要在 __init__ 中做。這樣當某人重用一個分析器實例時,會正確地重新初始化。
    2.象 k=='href' 的字符串比較是區分大小寫的,但是這里是安全的。因為 SGMLParser 會在創建 attrs 時將屬性名轉化為小寫。
    test.py
    import urllib, urllister
    usock=urllib.urlopen("http://m.tkk7.com/rain1102")
    parser=urllister.URLLister()
    parser.feed(usock.read())
    usock.close()
    parser.close()
    for url in parser.urls:print url
    for img in parser.imgs:print img
    posted on 2007-10-17 10:51 周銳 閱讀(2198) 評論(0)  編輯  收藏 所屬分類: Python
    主站蜘蛛池模板: 亚洲丝袜中文字幕| 亚洲av日韩av综合| kk4kk免费视频毛片| 亚洲AV伊人久久青青草原 | 日韩精品视频免费网址| 亚洲中文久久精品无码1| 4hu四虎最新免费地址| 亚洲18在线天美| 免费黄色大片网站| 男男gay做爽爽免费视频| 亚洲 综合 国产 欧洲 丝袜| 欧亚一级毛片免费看| 国产亚洲av片在线观看18女人 | 亚洲av中文无码乱人伦在线播放 | 七色永久性tv网站免费看| 亚洲AV无码成人网站久久精品大| 久久久高清日本道免费观看| 精品亚洲成AV人在线观看| 免费影院未满十八勿进网站| 亚洲精品无码久久| 亚洲无码视频在线| 色欲国产麻豆一精品一AV一免费| 亚洲伊人色一综合网| 国产精品无码一区二区三区免费 | 国产成人免费手机在线观看视频| 免费人成再在线观看网站 | 和日本免费不卡在线v| 亚洲av无码专区在线观看亚| AV在线亚洲男人的天堂| 你是我的城池营垒免费看 | 亚洲第一AV网站| 99久久这里只精品国产免费| 国产99久久亚洲综合精品| 亚洲色婷婷一区二区三区| 黄色永久免费网站| 黄色免费网站在线看| 亚洲第一永久在线观看| 免费一看一级毛片人| 99久9在线|免费| 国产AV无码专区亚洲AV琪琪| 日韩精品一区二区亚洲AV观看|