我尝试使用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!']
答案 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)