HTMLParser是Python自带的模块,使用简单,能够很容易的实现HTML文件的分析,是一个处理HTML的简便途径。
使用时需要定义一个继承HTMLParser的类,并重定义需要的成员函数以实现需要功能。
HTMLParser实例中几个常用方法:
#为解析器提供一些数据,数据格式必须是str
HTMLParser.feed(data)
#重置实例
HTMLParser.reset()
#处理开始标签 如:
HTMLParser.handle_starttag(tag, attrs)
#处理结束标签 如:
HTMLParser.handle_endtag(tag)
#处理开始标签和结束标签
HTMLParser.handle_startendtag(tag, attrs)
#处理一对闭合标签内的text数据 如:
G123中的G123HTMLParser.handle_data(data)
#处理文档中的注释 如:
HTMLParser.handle_comment(data)
#处理文档声明信息 如:
HTMLParser.handle_decl(decl)其中,tag是的html标签名,attrs是 元素为(属性,值)元组(tuple)的列表(list),data是字符串(str)。
HTMLParser自动将tag和attrs都转为小写。
具体程序:
#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:4518:57西安10:42
1152/1153普快西安13:23合肥第2日04:5905:15杭州11:19
2275/2278普快郑州23:52合肥第2日07:5508:08杭州14:06
2276/2277普快杭州15:31合肥当天21:4221:58郑州07:54
G1271/G1274高速动车武汉07:51合肥当天10:2410:44沈阳北18:59
G1272/G1273高速动车沈阳北07:39合肥当天16:2116:38武汉19:06
G257/G260高速动车青岛15:19合肥当天20:3920:55武汉23:12
......
......
T64空调特快合肥18:40合肥当天18:4018:40北京05:56
Z225/Z228直达特快北京21:50合肥第2日07:3207:32合肥07:32
Z226/Z227直达特快合肥21:50合肥当天21:5021:50北京07:40
187
更多HTMLParser方法请参考官方文档
学之,以记之。