一、利用HTMLParser進行網頁解析
具體HTMLParser官方文檔可參考http://docs.python.org/library/htmlparser.html#HTMLParser.HTMLParser
1、從一個簡單的解析例子開始
例1:
test1.html文件內容如下:
代碼如下:
<html>
<head>
<title> XHTML 與 HTML 4.01 標準沒有太多的不同</title>
</head>
<body>
i love you
</body>
</html>
下面是能夠列出title和body的程序示例:
代碼如下:
##@小五義:
##HTMLParser示例
import HTMLParser
class TitleParser(HTMLParser.HTMLParser):
def __init__(self):
self.taglevels=[]
self.handledtags=['title','body'] #提出標簽
self.processing=None
HTMLParser.HTMLParser.__init__(self)
def handle_starttag(self,tag,attrs):
if tag in self.handledtags:
self.data=''
self.processing=tag
def handle_data(self,data):
if self.processing:
self.data +=data
def handle_endtag(self,tag):
if tag==self.processing:
print str(tag)+':'+str(tp.gettitle())
self.processing=None
def gettitle(self):
return self.data
fd=open('test1.html')
tp=TitleParser()
tp.feed(fd.read())
運行結果如下:
title: XHTML 與 HTML 4.01 標準沒有太多的不同
body:
i love you
程序定義了一個TitleParser類,它是HTMLParser類的子孫。HTMLParser的feed方法將接收數據,并通過定義的HTMLParser對象對數據進行相應的解析。其中handle_starttag、handle_endtag判斷起始和終止tag,handle_data檢查是否取得數據,如果self.processing不為None,那么就取得數據。
2、解決html實體問題
(HTML 中有用的字符實體)
(1)實體名稱
當與到HTML中的實體問題時,上面的例子就無法實現,如這里將test1.html的代碼改為:
例2:
代碼如下:
<html>
<head>
<title> XHTML 與" HTML 4.01 "標準沒有太多的不同</title>
</head>
<body>
i love you×
</body>
</html>
利用上面的例子進行分析,其結果是:
title: XHTML 與 HTML 4.01 標準沒有太多的不同
新聞熱點
疑難解答