class MyHTMLParser(HTMLParser):
b1 = False
def handle_starttag(self, tag, attrs):
if tag =="ul":
self.b1 = True
def handle_data(self, data):
if self.b1:
print(data)
self.b1 = False
parser = MyHTMLParser()
parser.feed('<ul class="player-metadata floatleft"></ul><p>Gros caca</p><p>Zuul</p>')
我想提取空<ul class="player-metadata floatleft">
和</ul>
之间的数据。但是,即使我标记了<ul>
标记,handle_data
函数也会打印<ul class="player-metadata floatleft"></ul>
之后找到的第一个数据:
&#34; Gros caca&#34;
我想打印&#34;没有&#34;并且len(data)
返回0
。
答案 0 :(得分:2)
这几乎与this question重复。
想法是在处理标记时保持开始标记和封闭数据,然后在解析器处理结束标记时使用这些来执行操作,如下所示:
class MyHTMLParser(HTMLParser):
_data = ''
_starttag = ''
def handle_starttag(self, tag, attrs):
self._starttag = tag
def handle_data(self, data):
self._data = data
def handle_endtag(self, tag):
if self._starttag == 'ul' and self._data == '':
print('nothing')
elif (...):
(...)
else:
print(self._data)
这将处理空字符串并返回0
的{{1}}。