2014-02-27 53 views
0

HTMLParserpython的模塊在解析具有&字符的數據時有問題。下面的HTML代碼從herepython htmlparser'&'字符

<td style="text-align: center; color:#c00;">15:30</td><td>Haber</td><td>Haber & Aktüalite</td>

解析器代碼是採取:

from HTMLParser import HTMLParser 

class HTMLParser_haberciniz(HTMLParser): 
    def __init__(self): 
     HTMLParser.__init__(self) 
     self.inlink = False 

    def handle_starttag(self, tag, attrs): 
     if tag == 'td': 
      self.inlink = True 

    def handle_endtag(self, tag): 
     if tag == 'td': 
      self.inlink = False 

    def handle_data(self, data): 
     if self.inlink : 
      print data 

問題是,它解析所有Haber&Aktüalite爲不同的令牌,實際上應該是Haber & Aktüalite

+1

'&'在html中應該被編碼爲一個實體('&'),因爲'&'語法編碼html實體的開始(常見8位字符集範圍之外的命名字符),因此需要逃跑。大多數瀏覽器的解析器都檢測到'&'在上下文中的使用,暗示它用作字面字符和自動更正,所以html作者往往會有點草率... – collapsar

回答

0

許多XML解析器不保證一次性調用「數據」回調,即使是連續的文本片段。 HTMLParser也可能是這種情況。所以你最好不要依賴它。您可以將數據追加到某個內部緩衝區,然後只有在發生其他類型的事件時才處理它。

是的,正如collapsar所說,HTML在技術上也是無效的,儘管解析器似乎以合理的方式解析它。