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
学之,以记之。
转载于:https://www.cnblogs.com/baalhuo/p/5762090.html