<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 包含一個重要的類: SGMLParser。SGMLParserHTML 分解成有用的片段,比如開始標記和結束標記。一旦它成功地分解出某個數據為一個有用的片段,它會根據所發現的數據,調用一個自身內部的方法。為了使用這個分析器,您需要子類化 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
    主站蜘蛛池模板: 久久免费的精品国产V∧| 一本色道久久88亚洲精品综合| 日本视频免费观看| 国产午夜影视大全免费观看| 亚洲国产区男人本色在线观看| 国产成人精品免费视频大全麻豆 | 亚洲人成人一区二区三区| 免费一区二区三区在线视频| 伊人久久亚洲综合影院| 国产偷国产偷亚洲高清在线| 免费大黄网站在线观| 男女男精品网站免费观看| 亚洲精品视频久久久| 中文字幕手机在线免费看电影 | 少妇人妻偷人精品免费视频| 久久精品国产亚洲AV大全| 午夜国产精品免费观看 | 亚洲国产成人在线视频| 无码日韩人妻av一区免费| 亚洲午夜理论片在线观看| 国产精品免费一级在线观看| sihu国产精品永久免费| 亚洲v高清理论电影| www.黄色免费网站| 精品国产亚洲一区二区三区在线观看 | 国产精品亚洲片在线| 最近免费中文字幕高清大全 | 国产成人免费全部网站| 一级特黄色毛片免费看| 亚洲av最新在线网址| 无码国产精品一区二区免费式影视 | 国产成人精品免费视频动漫| 亚洲精品动漫免费二区| 亚洲午夜福利717| 久久精品免费一区二区| 国产成人久久精品亚洲小说| 亚洲自偷自偷图片| 皇色在线视频免费网站| eeuss影院免费92242部| 色婷五月综激情亚洲综合| 亚洲高清国产拍精品青青草原|