python中html.parser_Python中使用HTMLParser解析HTML文档

HTMLParser是Python自带的模块,使用简单,能够很容易的实现HTML文件的分析,是一个处理HTML的简便途径。

使用时需要定义一个继承HTMLParser的类,并重定义需要的成员函数以实现需要功能。

HTMLParser实例中几个常用方法:

#为解析器提供一些数据,数据格式必须是str

HTMLParser.feed(data)

#重置实例

HTMLParser.reset()

#处理开始标签 如:

其中参数对应信息为handle_starttag('id', [('id', 'main')])

HTMLParser.handle_starttag(tag, attrs)

#处理结束标签 如:

HTMLParser.handle_endtag(tag)

#处理开始标签和结束标签

HTMLParser.handle_startendtag(tag, attrs)

#处理一对闭合标签内的text数据 如:

G123中的G123

HTMLParser.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方法请参考官方文档

学之,以记之。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值