从Python HTMLPasser返回数据
我正在尝试使用Python的HTML.parser.HTMLParser函数编写一个HTML解析器,但有一些问题 我定义了一个解析类,如下所示:从Python HTMLPasser返回数据,python,html,Python,Html,我正在尝试使用Python的HTML.parser.HTMLParser函数编写一个HTML解析器,但有一些问题 我定义了一个解析类,如下所示: class MyHTMLParser(HTMLParser): def __init__(self): self.messages = [] def handle_starttag(self, tag, attrs): message = "Encountered a start tag:
class MyHTMLParser(HTMLParser):
def __init__(self):
self.messages = []
def handle_starttag(self, tag, attrs):
message = "Encountered a start tag: %s" % tag
print(message)
self.messages.append(message)
def handle_endtag(self, tag):
message = "Encountered an end tag: %s" % tag
print(message)
self.messages.append(message)
def handle_data(self, data):
message = "Encountered some data: %s" % data
print(message)
self.messages.append(message)
parser = MyHTMLParser()
html_parser.feed("<html><head><title>Test</title></head>")
print(html_parser.messages)
类MyHTMLParser(HTMLParser):
定义初始化(自):
self.messages=[]
def句柄\u开始标记(自身、标记、属性):
message=“遇到开始标记:%s”%tag
打印(信息)
self.messages.append(消息)
def handle_endtag(self,tag):
message=“遇到结束标记:%s”%tag
打印(信息)
self.messages.append(消息)
def句柄_数据(自身、数据):
message=“遇到一些数据:%s”%data
打印(信息)
self.messages.append(消息)
parser=MyHTMLParser()
html_parser.feed(“测试”)
打印(html_parser.messages)
我想存储handle_data()函数的结果,但无法让handle_data()返回除None以外的任何结果,当我尝试将handle_*的结果存储在self.message属性中时,我得到以下错误:
回溯(最近一次呼叫最后一次):
文件“/parse_html.py”,第33行,在
html_parser.feed(“测试”)
文件“/opt/local/depot/python/3.6.4/lib/python3.6/html/parser.py”,第110行,在提要中
self.rawdata=self.rawdata+data
AttributeError:“MyHTMLParser”对象没有属性“rawdata”
我总是可以将“messages”转换为全局变量,但我正在寻找另一种存储“handle_*”函数结果的方法。检索handle_data()调用找到的所有元素的列表的推荐方法是什么
谢谢你的提示
凯瑟琳我自己愚蠢的错误 我忘记了类初始化中的HTMLParser.init(self)行。它应该是这样的:
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.messages = []
def handle_starttag(self, tag, attrs):
message = "Encountered a start tag: %s" % tag
print(message)
self.messages.append(message)
def handle_endtag(self, tag):
message = "Encountered an end tag: %s" % tag
print(message)
self.messages.append(message)
def handle_data(self, data):
message = "Encountered some data: %s" % data
print(message)
self.messages.append(message)
parser = MyHTMLParser()
html_parser.feed("<html><head><title>Test</title></head>")
print(html_parser.messages)
类MyHTMLParser(HTMLParser):
定义初始化(自):
HTMLPasser.\uuuuu初始化\uuuuuuuuu(自)
self.messages=[]
def句柄\u开始标记(自身、标记、属性):
message=“遇到开始标记:%s”%tag
打印(信息)
self.messages.append(消息)
def handle_endtag(self,tag):
message=“遇到结束标记:%s”%tag
打印(信息)
self.messages.append(消息)
def句柄_数据(自身、数据):
message=“遇到一些数据:%s”%data
打印(信息)
self.messages.append(消息)
parser=MyHTMLParser()
html_parser.feed(“测试”)
打印(html_parser.messages)
您需要调用基的构造函数