2013-04-12 70 views
0

某处在一个HTML文件,我有一个内部的标签的div这样的:如何用HTMLParser读取内部标签?

<div class="mydiv"> 
    <h3><a href="#">TEXT</a></h3> 
</div> 

如何找到使用的HTMLParser类在Python中a元素中的文本?我想用HTMLParser来做,而不是BeautifulSoup。

回答

1

这应该工作:

"""innerlink.py - print text of e.g. `<div><h3><a>This</a></h3></div>`.""" 

from html.parser import HTMLParser 


class InnerLinkParser(HTMLParser): 

    """A parser for HTML with links in h3s in divs.""" 

    def __init__(self): 
     HTMLParser.__init__(self) 
     self.stack = [] 

    def handle_starttag(self, tag, attrs): 
     self.stack.append(tag) 

    def handle_endtag(self, tag): 
     while self.stack: 
      item = self.stack.pop() 
      if item == tag: 
       break 
     else: 
      raise ValueError("unmatched closing %r tag." % tag) 

    def handle_data(self, data): 
     if self.stack[-3:] == ["div", "h3", "a"]: 
      print(data) 


def parse(html): 
    """Feed the parser with some HTML.""" 
    parser = InnerLinkParser() 
    parser.feed(html) 

用法:

>>> from innerlink import parse 
>>> with open("fragment.html") as f: 
...  parse(f.read()) 
... 
TEXT 

handle_endtag()方法写应付隐含地关闭标签的可能性;你可能会也可能不需要这个。