2015-05-16 31 views
2
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>後找到的第一個數據:Python的HTMLParser的 - 兩個標籤

「格羅斯CACA」

我想打印的「一無所有」和len(data)返回0

你能幫我嗎?我也不允許使用BeautifulSoup。

回答

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) 

這將處理空字符串並返回0len(self._data)

+0

非常感謝。我希望我能夠upvote你的答案! 另外我相信你的意思是打印(self._data)的最後一行。 – connie246

+0

是的,但你明白了。 ;) 很高興我能幫上忙。 –

+0

我相信即使評分較低,您也可以接受答案,這會從問題中刪除[tag:unanswered]標籤。 –