解析 HTML -- SGMLParser

来源:互联网 发布:mac导入照片到ipad 编辑:程序博客网 时间:2024/05/01 07:32
[python] view plain copy
  1. #coding:utf-8  
  2. from sgmllib import SGMLParser  
  3. class GetIdList(SGMLParser):  
  4.   
  5.     def reset(self):  
  6.         self.IDlist=[]  
  7.         self.flag=False  
  8.         self.getdata=False  
  9.         self.verbatim = 0  
  10.         SGMLParser.reset(self)  
  11.   
  12.     def start_div(self,attrs):  
  13.         if self.flag==True:  
  14.             self.verbatim+=1 #进入子层div了,层数+1  
  15.         for k,v in attrs:  
  16.             if k=="class" and v=="entry-content":#确定进入了<div class='entry-content'>  
  17.                 self.flag=True  
  18.   
  19.     def end_div(self):#遇到</div>  
  20.         if self.verbatim==0:  
  21.             self.flag=False  
  22.         if self.flag==True:#退出子层div了,层数减 1  
  23.             self.verbatim-=1  
  24.   
  25.   
  26.     def start_p(self,attrs):  
  27.         if self.flag==False:  
  28.             return  
  29.         self.getdata=True  
  30.   
  31.     def end_p(self):#遇到</p>  
  32.         if self.getdata:  
  33.             self.getdata=False  
  34.   
  35.     def handle_data(self,text):#处理文本  
  36.         if self.getdata:  
  37.             self.IDlist.append(text)  
  38.     def printID(self):  
  39.         for i in self.IDlist:  
  40.             print i.decode("utf-8")  
  41.   
  42.   
  43. if __name__ == '__main__':  
  44.   
  45.     the_page ='''''<html> 
  46.     <head> 
  47.     <title>test</title> 
  48.     </head> 
  49.     <body> 
  50.     <h1>title</h1> 
  51.     <div class='entry-content'> 
  52.  
  53.     <p>感兴趣内容1</p> 
  54.     <p>感兴趣内容2</p> 
  55.     …… 
  56.     <p>感兴趣内容n</p> 
  57.     <div class='entry-content'>我是来捣乱的2<div class= 'ooxx'>我是来捣乱的3</div></div> 
  58.     </div> 
  59.     <div class='content'> 
  60.     <p>内容1</p> 
  61.     <p>内容2</p> 
  62.     …… 
  63.     <p>内容n</p> 
  64.     </div> 
  65.     </body> 
  66.     </html> 
  67.     '''  
  68.     gid=GetIdList()  
  69.     gid.feed(the_page)  
  70.     gid.printID()  
  71.     gid.close()  


结果:

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

感兴趣内容n


引自:

小练习 SGMLParser 解析 HTML


0 0