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
版权声明:本文为博主原创文章,未经博主允许不得转载。