您的位置:首页 > Web前端 > HTML

#小练习 SGMLParser练习 分类: HTMLParser 2013-11-12 15:50 456人阅读 评论(0) 收藏

2013-11-12 15:50 609 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐