我沒有看看HTMLParser模塊本身,但我可以看到feed固有地調用handle_data,它在派生類中進行打印。 @ ron的答案建議將數據直接傳遞給你的函數,這是完全沒問題的。但是,由於您是OOP的新手,因此可能需要查看此代碼。
這是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的實例變量爲空列表,然後調用基類(HTMLParser)中的提要方法並繼續執行正常工作。所以,通過重寫feed方法,我可以做一些額外的東西(添加一個新的輸出變量)。 handle_data方法同樣是一個重寫方法。事實上,的HTMLParser的handle_data方法甚至沒有(根據文檔。)做任何事......什麼都沒有
所以,我只想澄清......
你叫p.feed(page)
它調用MyParser .feed方法 MyParser.feed將變量self.output設置爲空列表,然後調用HTMLParser.feed handle_data方法將該行添加到輸出列表的末尾。
您現在可以通過調用p.output來訪問數據。
你的解釋令人難以置信的清晰。這應該在教科書中。非常感謝!我正準備把我接受的答案給予羅恩,因爲你的分數比他高。但既然你的答案很好,可以幫助別人,我想我應該給你接受的答案 – zjk 2010-02-02 16:25:49