Python HTMLParser - 提取"空"两个标签之间的数据

时间:2015-05-16 09:13:51

标签: python html

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

你能帮帮我吗?我也被禁止使用BeautifulSoup。

1 个答案:

答案 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}}。