基于HTMLParser的反复使用的问题
此时如果要多次使用MyHTMLParser解析数据的话运行结果from HTMLParser import HTMLParser class MyHTMLParser(HTMLParser): data = [] def handle_starttag(self, tag, attrs): """ recognize start tag, like <div> :param tag: :param attrs: :return: """ print("Encountered a start tag:", tag) def handle_endtag(self, tag): """ recognize end tag, like </div> :param tag: :return: """ print("Encountered an end tag :", tag) self.data.append(tag) def handle_data(self, data): """ recognize data, html content string :param data: :return: """ print("Encountered some data :", data) def handle_startendtag(self, tag, attrs): """ recognize tag that without endtag, like <img /> :param tag: :param attrs: :return: """ print("Encountered startendtag :", tag) def handle_comment(self,data): """ :param data: :return: """ print("Encountered comment :", data) # def reset(self): # HTMLParser.reset(self) # self.data = [] def close(self): HTMLParser.close(self) resp = '<html><head><title>Test</title></head><body><h1>Parse me!</h1><img src = "" /><!-- comment --></body></html>' parser = MyHTMLParser() parser.feed(resp) print(parser.data) print("data",parser.data) parser = MyHTMLParser() parser.feed(resp) print(parser.data)
('data', ['title', 'head', 'h1', 'body', 'html'])
['title', 'head', 'h1', 'body', 'html', 'title', 'head', 'h1', 'body', 'html']
此时结果仍然保留着上次处理的结果
此时需要重新重写reset()方法
def reset(self): HTMLParser.reset(self) self.data = []
此时运行结果
('data', ['title', 'head', 'h1', 'body', 'html'])
['title', 'head', 'h1', 'body', 'html']
此时才是新的数据不保留上次的数据处理