handle_data()返回什么?

时间:2019-10-29 00:49:04

标签: python

我尝试使用html.parser中的handle_data()从网页中获取仅有意义上下文的列表(我的测试代码中只有两行网页内容),但是得到了多个不在列表中的列表。我不明白handle_data()返回什么。有人可以帮我吗?如何将它们仅存储在一个列表中?

from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):

    def handle_data(self, data):
        a = []
        for i in data.split():
            a.append(i)
        print(a)
        return a

parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head><body><h1>Parse me!</h1></body></html>')

结果:     ['测试']     ['Parse','me!']

results

2 个答案:

答案 0 :(得分:0)

每次分析器在html标记内发现文本/内容时,都会调用HTMLparser的handle_data方法。

在您的情况下,handle_data将被调用两次。在第一个调用中,变量data等于'Test',第二个调用将为'Parse me!'。

如果要将所有文本/内容存储在一个列表中,则只需在类中创建一个变量即可。

from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):
    a = []

    def handle_data(self, data):
        self.a.append(data)

parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head><body><h1>Parse me!</h1></body></html>')

print(parser.a) # ['Test', 'Parse me!']

答案 1 :(得分:0)

据我所知http.parser是低级模块,可以帮助解析HTML,但不返回任何内容。您必须决定如何处理数据。您可以打印它或放入一些变量或创建树等。但这需要编写所有将返回任何内容的代码。

例如,我创建了类变量result来保存在handle_data中获得的所有字符串,然后我可以从该变量中获取所有文本。

from html.parser import HTMLParser

class MyHTMLParser(HTMLParser):

    result = []

    def handle_data(self, data):
        self.result.append(data)

parser = MyHTMLParser()
parser.feed('<html><head><title>Test</title></head><body><h1>Parse me!</h1></body></html>')
print(parser.result)