講述面向?qū)ο蟮恼Z言——Python語言
Python語言確實(shí)是一種十分精彩又強(qiáng)大的語言,它合理地結(jié)合了高性能與使得編寫程序簡單有趣的特色,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。
對(duì)搜索引擎、文件索引、文檔轉(zhuǎn)換、數(shù)據(jù)檢索、站點(diǎn)備份或遷移等應(yīng)用程序來說,經(jīng)常用到對(duì)網(wǎng)頁(即HTML文件)的解析處理。事實(shí)上,通過Python語言提供的各種模塊,我們無需借助Web服務(wù)器或者Web瀏覽器就能夠解析和處理HTML文檔。
本文上篇中,我們介紹了一個(gè)可以幫助簡化打開位于本地和Web上的HTML文檔的Python模塊。在本文中,我們將論述如何使用Python模塊來迅速解析在HTML文件中的數(shù)據(jù)。從而處理特定的內(nèi)容,如鏈接、圖像和Cookie等。同時(shí)還會(huì)介紹如何規(guī)范HTML文件的格式標(biāo)簽,Python語言還有一個(gè)非常有用的模塊HTMLParser。
該模塊使我們能夠根據(jù)HTML文檔中的標(biāo)簽來簡潔、高效地解析HTML文檔。所以,在處理HTML文檔的時(shí)候,HTMLParser是最常用的模塊之一。處理HTML文檔的時(shí)候,我們常常需要從其中提取出所有的鏈接。使用HTMLParser模塊后,這項(xiàng)任務(wù)將變得易如反掌。
首先,我們需要定義一個(gè)新的HTMLParser類,以覆蓋handle_starttag()方法,我們將使用這個(gè)方法來顯示所有標(biāo)簽的HRef屬性值。定義好新的HTMLParser類之后,需要?jiǎng)?chuàng)建一個(gè)實(shí)例來返回Python語言。然后,就可以使用urllib.urlopen(url)打開HTML文檔并讀取該HTML文件的內(nèi)容了。
為了解析HTML文件的內(nèi)容并顯示包含其中的鏈接,可以使用read()函數(shù)將數(shù)據(jù)傳遞給HTMLParser對(duì)象。HTMLParser對(duì)象的feed函數(shù)將接收數(shù)據(jù),并通過定義的HTMLParser對(duì)象對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的解析。
需要注意,如果傳給HTMLParser的feed()函數(shù)的數(shù)據(jù)不完整的話,那么不完整的標(biāo)簽會(huì)保存下來,并在下一次調(diào)用feed()函數(shù)時(shí)進(jìn)行解析。當(dāng)HTML文件很大,需要分段發(fā)送給解析器的時(shí)候,這個(gè)功能就會(huì)有用武之地了。下面是一個(gè)具體的例子。
- import HTMLParser
- import urllib
- import sys
- #定義HTML解析器
- class parseLinks(HTMLParser.HTMLParser):
- def handle_starttag(self, tag, attrs):
- if tag == 'a':
- for name,value in attrs:
- if name == 'href':
- print value
- print self.get_starttag_text()
- #創(chuàng)建HTML解析器的實(shí)例
- lParser = parseLinks()
- #打開HTML文件
- lParser.feed(urllib.urlopen( \
- "http://www.python.org/index.html").read())
- lParser.close()
上述代碼的運(yùn)行結(jié)果太長,在此省略,您可以自己運(yùn)行代碼試試。
【編輯推薦】






