我开始学习python。我的python版本是3.1
我以前从未学过OOP, 所以我对HTMLParser感到困惑。
from html.parser import HTMLParser
class parser(HTMLParser):
def handle_data(self, data):
print(data)
p = parser()
page = """<html><h1>title</h1><p>I'm a paragraph!</p></html>"""
p.feed(page)
我会得到这个:
标题
我是一个段落!
我希望将这些数据传递给函数,我该怎么办?
抱歉我的英语不好,谢谢你的帮助!
答案 0 :(得分:5)
我没有查看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的feed方法。相反,当调用p.feed(page)
时,它将调用我的方法,该方法创建/设置一个名为output的实例变量到一个空列表,然后调用基类中的feed方法(HTMLParser)并继续它的作用一般。因此,通过重写feed方法,我可以做一些额外的事情(添加一个新的输出变量)。 handle_data方法类似地是覆盖方法。事实上,HTMLParser的handle_data方法甚至没有做任何事情......根本没有(根据文档。)
所以,只是为了澄清......
您拨打调用MyParser.feed方法的p.feed(page)
MyParser.feed将变量self.output设置为空列表,然后调用HTMLParser.feed
handle_data方法将行添加到输出列表的末尾。
您现在可以通过调用p.output来访问数据。
答案 1 :(得分:2)
只是一个例子:
def my_global_fun(data):
print "processing", data
class parser(HTMLParser):
def my_member_fun(self, data):
print "processing", data
def handle_data(self, data):
self.my_member_fun(data)
# or
my_global_fun(data)
祝学习OOP好运!