HTMLParser 不解析整个输入
HTMLParser does not parse the entire input
我在python写过一些脚本,但从未真正接触过类。现在我需要一个,因为设置了一个 html 解析器(来自网络中的片段)。它工作正常,但最后一个数据字符串丢失了。上次好像没有运行这个功能。
我的代码如下:
class MyHTMLParser(HTMLParser):
def __init__(self):
#reset
self.reset()
#options
self.strict = False
self.convert_charrefs= True
#create empty list for all my stored data
self.fed = []
def handle_data(self, data):
print ('D:', data) #as you might see in output of a run, string after last tag is not added, because function did obviously not run
self.fed.append('-'+data)
def get_data(self):
return ''.join(self.fed)
def process_description(desc):
s = MyHTMLParser()
s.feed(desc)
return s.get_data()
text_html='first <br />second<br />third'
text=process_description(text_html)
print (text)
输出:
D: first
D: second
-first -second
text_html 字符串没有被函数 process_description() 完全处理。从输出中可以看出,handle_data() 函数未处理最后一个 html 标记之后的子字符串 ("third")。一定有语法错误。怎么了?
子类 .__init__
应该只调用基类 .__init__
而不是复制你认为它做的事情并且只做额外的真正特定于子类的事情。
def __init__(self):
super().__init__(strict = False, convert_charrefs= True)
#create empty list for all my stored data
self.fed = []
实际上错误的是你忘记在完成喂食后调用 .close() 。来自文档:"Force processing of all buffered data as if it were followed by an end-of-file mark."
def process_description(desc):
s = MyHTMLParser()
s.feed(desc)
s.close() # <-- added #
return s.get_data()
收盘后的结果就是你想要的和期待的。
D: first
D: second
D: third
-first -second-third
(space 在输入中。)
我在python写过一些脚本,但从未真正接触过类。现在我需要一个,因为设置了一个 html 解析器(来自网络中的片段)。它工作正常,但最后一个数据字符串丢失了。上次好像没有运行这个功能。
我的代码如下:
class MyHTMLParser(HTMLParser):
def __init__(self):
#reset
self.reset()
#options
self.strict = False
self.convert_charrefs= True
#create empty list for all my stored data
self.fed = []
def handle_data(self, data):
print ('D:', data) #as you might see in output of a run, string after last tag is not added, because function did obviously not run
self.fed.append('-'+data)
def get_data(self):
return ''.join(self.fed)
def process_description(desc):
s = MyHTMLParser()
s.feed(desc)
return s.get_data()
text_html='first <br />second<br />third'
text=process_description(text_html)
print (text)
输出:
D: first
D: second
-first -second
text_html 字符串没有被函数 process_description() 完全处理。从输出中可以看出,handle_data() 函数未处理最后一个 html 标记之后的子字符串 ("third")。一定有语法错误。怎么了?
子类 .__init__
应该只调用基类 .__init__
而不是复制你认为它做的事情并且只做额外的真正特定于子类的事情。
def __init__(self):
super().__init__(strict = False, convert_charrefs= True)
#create empty list for all my stored data
self.fed = []
实际上错误的是你忘记在完成喂食后调用 .close() 。来自文档:"Force processing of all buffered data as if it were followed by an end-of-file mark."
def process_description(desc):
s = MyHTMLParser()
s.feed(desc)
s.close() # <-- added #
return s.get_data()
收盘后的结果就是你想要的和期待的。
D: first
D: second
D: third
-first -second-third
(space 在输入中。)