Я не изучал сам модуль HTMLParser, но я вижу, что фид по своей сути вызывает handle_data, который в вашем производном классе печатает.Ответ @ ron предполагает передачу данных непосредственно вашей функции, что вполне нормально.Тем не менее, поскольку вы новичок в ООП, возможно, взгляните на этот код.
Это Python, 2.x, но я думаю, что единственное, что может измениться, - это местоположение пакета, html.parser вместоHTMLParser.
from HTMLParser import HTMLParser
class MyParser(HTMLParser):
def handle_data(self, data):
self.output.append(data)
def feed(self, data):
self.output = []
HTMLParser.feed(self, data)
p = MyParser()
page = """<html><h1>title</h1><p>I'm a paragraph!</p></html>"""
p.feed(page)
print p.output
output
['title', "I'm a paragraph!"]
Здесь я переопределяю метод подачи HTMLParser.Вместо этого, когда вызов сделан p.feed(page)
, он вызовет мой метод, который создает / устанавливает переменную экземпляра с именем output в пустой список, а затем вызывает метод feed в базовом классе (HTMLParser) и продолжает то, что обычно делает.Итак, переопределив метод подачи, я смог сделать некоторые дополнительные вещи (добавил новую выходную переменную).Метод handle_data аналогично является методом переопределения.На самом деле, метод handle_data в HTMLParser даже ничего не делает ... вообще ничего (согласно документам).
Итак, просто чтобы уточнить ...
Вы звоните p.feed(page)
, который вызывает метод MyParser.feed. MyParser.feed устанавливает переменную self.output в пустой список и затем вызывает HTMLParser.feed. Метод handle_data добавляет строку в конец списка вывода.
Теперь у вас есть доступ к данным через вызов p.output.