转贴一个Python HTMLParser的使用例子

转贴一个Python HTMLParser的使用例子

#!/usr/bin/env python

import sys
import urllib
import HTMLParser

class CustomParser(HTMLParser.HTMLParser):
    selected = ('table', 'h1', 'font', 'ul', 'li', 'tr', 'td', 'a')
   
    def reset(self):
        HTMLParser.HTMLParser.reset(self)
        self._level_stack = []
    def handle_starttag(self, tag, attrs):
        if tag in CustomParser.selected:
            self._level_stack.append(tag)
    def handle_endtag(self, tag):
        if self._level_stack \
        and tag in CustomParser.selected \
        and tag == self._level_stack[-1]:
            self._level_stack.pop()
    def handle_data(self, data):
        if "/".join(self._level_stack) in (
            'table/tr/td',
            'table/tr/td/h1/font',
            'table/tr/td/ul/li'):
            print self._level_stack, data
        
if len(sys.argv) > 1:
    params = urllib.urlencode({'ip': sys.argv[1], 'action': 2})
else:
    params = None

content = unicode(urllib.urlopen('http://www.ip138.com/ips8.asp',params).read(), 'GB2312')

parser = CustomParser()
parser.feed(content)
parser.close()

http://www.juyimeng.com/python-htmlparser.html
更喜欢用正则的说。。。
有类似Perl里HTML::TreeBuilder这样的东东吗?
感觉TreeBuilder很强大很灵活