HTMLParser是Python自帶的模塊,使用簡單,能夠很容易的實現HTML文件的分析,是一個處理HTML的簡便途徑。
使用時需要定義一個繼承HTMLParser的類,並重定義需要的成員函數以實現需要功能。
HTMLParser實例中幾個常用方法:
其中,tag是的html標籤名,attrs是 元素爲(屬性,值)元組(tuple)的列表(list),data是字符串(str)。#爲解析器提供一些數據,數據格式必須是str HTMLParser.feed(data) #重置實例 HTMLParser.reset() #處理開始標籤 如:<div id="main"> 其中參數對應信息爲handle_starttag('id', [('id', 'main')]) HTMLParser.handle_starttag(tag, attrs) #處理結束標籤 如:</div> HTMLParser.handle_endtag(tag) #處理開始標籤和結束標籤 HTMLParser.handle_startendtag(tag, attrs) #處理一對閉合標籤內的text數據 如:<td>G123</td>中的G123 HTMLParser.handle_data(data) #處理文檔中的註釋 如: <!--comment--> HTMLParser.handle_comment(data) #處理文檔聲明信息 如:<!DOCTYPE html> HTMLParser.handle_decl(decl)
HTMLParser自動將tag和attrs都轉爲小寫。
下面以http://qq.ip138.com/train/anhui/HeFei.htm頁面的數據爲例,解析其中的車次信息,頁面信息如下圖:
具體程序:
結果輸出:#encoding:utf-8 ''' Created on 2016年7月21日 python version 3.5 @author: baalhuo ''' from html.parser import HTMLParser import urllib.request import re liststr = list() #創建list存放車次信息 class MyHTMLParser(HTMLParser): tempstr=str() def handle_starttag(self, tag, attrs): if tag=='tr': self.tempstr='' def handle_endtag(self, tag): if tag=='tr': #匹配列車類型 過濾無用的tr標籤 matchObj = re.match( r'G|D|K|T|Z|\d', self.tempstr) if matchObj: liststr.append(self.tempstr) def handle_data(self, data): if(data.isspace()==False): self.tempstr+=data+'\t' url = 'http://qq.ip138.com/train/anhui/HeFei.htm' data = urllib.request.urlopen(url).read() data = data.decode('gb2312') #根據抓取頁面設置數據編碼 par = MyHTMLParser() par.feed(data) for value in liststr: print(value) print(liststr.__len__())
1151/1154 普快 杭州 12:40 合肥 當天18:45 18:57 西安 10:42 1152/1153 普快 西安 13:23 合肥 第2日04:59 05:15 杭州 11:19 2275/2278 普快 鄭州 23:52 合肥 第2日07:55 08:08 杭州 14:06 2276/2277 普快 杭州 15:31 合肥 當天21:42 21:58 鄭州 07:54 G1271/G1274 高速動車 武漢 07:51 合肥 當天10:24 10:44 瀋陽北 18:59 G1272/G1273 高速動車 瀋陽北 07:39 合肥 當天16:21 16:38 武漢 19:06 G257/G260 高速動車 青島 15:19 合肥 當天20:39 20:55 武漢 23:12 ...... ...... T64 空調特快 合肥 18:40 合肥 當天18:40 18:40 北京 05:56 Z225/Z228 直達特快 北京 21:50 合肥 第2日07:32 07:32 合肥 07:32 Z226/Z227 直達特快 合肥 21:50 合肥 當天21:50 21:50 北京 07:40 187
更多HTMLParser方法請參考官方文檔3.5https://docs.python.org/3/library/html.parser.html
2.7https://docs.python.org/2/library/htmlparser.html
學之,以記之。
Python中使用HTMLParser解析HTML文檔
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.