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