Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Python HTMLPasser返回数据_Python_Html - Fatal编程技术网

从Python HTMLPasser返回数据

从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:

我正在尝试使用Python的HTML.parser.HTMLParser函数编写一个HTML解析器,但有一些问题

我定义了一个解析类,如下所示:

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)

您需要调用基的构造函数