zoukankan      html  css  js  c++  java
  • #小练习 SGMLParser练习 分类: HTMLParser 2013-11-12 15:50 456人阅读 评论(0) 收藏

    SGMLParser 将 HTML 分解成有用的片段, 比如开始标记和结束标记。一旦它成功地分解出某个数据为一个有用的片段,它会根据 所发现的数据,调用一个自身内部的方法。为了使用这个分析器,您需要子类化 SGML- Parser类,并且覆盖这些方法。

    SGMLParser类里面包含了很多内部方法,开始读取html后,遇到相应的数据就会调用其对应的方法,最重要的方法有三个:

    • start_tagname(self, attrs)
    • end_tagname(self)
    • handle_data(self, text)
    #coding:utf-8
    
    from sgmllib import SGMLParser
    class myhp(SGMLParser):
    
        def reset(self):
            self.l=[]
            self.getdata=False
            self.flag=False
    
            SGMLParser.reset(self)
        def start_div(self,attrs):
            for k,v in attrs:
                if k=='class' and v=='entry-content':#进入div,设置flag=True
                    self.flag=True
        def start_p(self,attrs):
            self.getdata=True #进入<p>,设置getdata=True
        def end_p(self):
            self.getdata=False
    
        def handle_data(self,data):
            if self.flag and self.getdata:#获取<div><p>标签的数据
                self.l.append(data)
                print data.decode("utf-8")
    
        def end_div(self):
            self.flag=False
    
    if __name__ == '__main__':
        
        the_page ='''<html>
        <head>
        <title>test</title>
        </head>
        <body>
        <h1>title</h1>
        <div class='entry-content'>
    
        <p>感兴趣内容1</p>
        <p>感兴趣内容2</p>
        ……
        <p>感兴趣内容n</p>
        <div class='entry-content'><div>捣乱</div><p>兴趣</p></div>
        <div class='entry-content'>我是来捣乱的2<div class= 'ooxx'>我是来捣乱的3</div></div>
        </div>
        <div class='entry-content'>
        <p>内容1</p>
        <p>内容2</p>
        ……
        <p>内容n</p>
        </div>
        </body>
        </html>
        '''
        m=myhp()
        m.feed(the_page)
        m.close()
    

    结果:

    感兴趣内容1
    感兴趣内容2
    感兴趣内容n
    内容1
    内容2
    内容n

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    属性值和引号
    PPT中背景音乐与插入文件中的声音有什么区别?
    C#笔记分享
    为什么《穹顶之下》没有说服我?
    Office 2019安装并激活(最简洁的安装方法)
    【转】获取Sprite的实际Rect
    什么是Cocos2d-x
    【转】最新基于adt-bundle-windows-x86的android开发环境搭建
    在cocos2d-x中使用位图字体
    TexturePacker的使用
  • 原文地址:https://www.cnblogs.com/think1988/p/4628018.html
Copyright © 2011-2022 走看看