'''
HTMLParser类中,定义了很多的方法,但是很多方法都是没有实现的,
这需要我们继承HTMLParser类,自己去实现一些方法
如: # Overridable -- handle start tag
def handle_starttag(self, tag, attrs):
pass # Overridable -- handle end tag
def handle_endtag(self, tag):
pass # Overridable -- handle character reference
def handle_charref(self, name):
pass # Overridable -- handle entity reference
def handle_entityref(self, name):
pass # Overridable -- handle data
def handle_data(self, data):
pass # Overridable -- handle comment
def handle_comment(self, data):
pass # Overridable -- handle declaration
def handle_decl(self, decl):
pass # Overridable -- handle processing instruction
def handle_pi(self, data):
pass '''

下面是我做的demo

运行效果:

Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>>
开始读取文件:[c:\test\hongten.html]
源html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> Python Html module </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="Hongten">
<meta name="Keywords" content="hongten,python">
<meta name="Description" content="this blogs is about python">
</head>
<!-- this is comment-->
<body>
<table border = "">
<tr>
<td>
Author
</td>
<td>
Hongten
</td>
<td>
Mail
</td>
<td>
hongtenzone@foxmail.com
</td>
</tr>
<tr>
<td>
Blog
</td>
<td>
<a href="http://www.blogs.com/hongten">http://www.blogs.com/hongten</a>
</td>
<td>
QQ
</td>
<td>
648719819
</td>
</tr>
</table>
</body>
</html> ##################################################
遇到声明:DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" 开始处理:DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
遇到数据:
开始处理: 遇到起始标签:html 开始处理:html
遇到数据:
开始处理: 遇到起始标签:head 开始处理:head
遇到数据:
开始处理: 遇到起始标签:title 开始处理:title
遇到数据: Python Html module 开始处理: Python Html module
遇到结束标签:title 开始处理:title
遇到数据:
开始处理: 遇到起始标签:meta 开始处理:meta
遇到数据:
开始处理: 遇到起始标签:meta 开始处理:meta
遇到数据:
开始处理: 遇到起始标签:meta 开始处理:meta
遇到数据:
开始处理: 遇到起始标签:meta 开始处理:meta
遇到数据:
开始处理: 遇到结束标签:head 开始处理:head
遇到数据:
开始处理: 遇到注释: this is comment 开始处理: this is comment
遇到数据:
开始处理: 遇到起始标签:body 开始处理:body
遇到数据:
开始处理: 遇到起始标签:table 开始处理:table
遇到数据:
开始处理: 遇到起始标签:tr 开始处理:tr
遇到数据:
开始处理: 遇到起始标签:td 开始处理:td
遇到数据:
Author
开始处理:
Author 遇到结束标签:td 开始处理:td
遇到数据:
开始处理: 遇到起始标签:td 开始处理:td
遇到数据:
Hongten
开始处理:
Hongten 遇到结束标签:td 开始处理:td
遇到数据:
开始处理: 遇到起始标签:td 开始处理:td
遇到数据:
Mail
开始处理:
Mail 遇到结束标签:td 开始处理:td
遇到数据:
开始处理: 遇到起始标签:td 开始处理:td
遇到数据:
hongtenzone@foxmail.com
开始处理:
hongtenzone@foxmail.com 遇到结束标签:td 开始处理:td
遇到数据:
开始处理: 遇到结束标签:tr 开始处理:tr
遇到数据:
开始处理: 遇到起始标签:tr 开始处理:tr
遇到数据:
开始处理: 遇到起始标签:td 开始处理:td
遇到数据:
Blog
开始处理:
Blog 遇到结束标签:td 开始处理:td
遇到数据:
开始处理: 遇到起始标签:td 开始处理:td
遇到数据:
开始处理: 遇到起始标签:a 开始处理:a
遇到数据:http://www.blogs.com/hongten 开始处理:http://www.blogs.com/hongten
遇到结束标签:a 开始处理:a
遇到数据:
开始处理: 遇到结束标签:td 开始处理:td
遇到数据:
开始处理: 遇到起始标签:td 开始处理:td
遇到数据:
QQ
开始处理:
QQ 遇到结束标签:td 开始处理:td
遇到数据:
开始处理: 遇到起始标签:td 开始处理:td
遇到数据:
648719819
开始处理:
648719819 遇到结束标签:td 开始处理:td
遇到数据:
开始处理: 遇到结束标签:tr 开始处理:tr
遇到数据:
开始处理: 遇到结束标签:table 开始处理:table
遇到数据:
开始处理: 遇到结束标签:body 开始处理:body
遇到数据:
开始处理: 遇到结束标签:html 开始处理:html
遇到数据:
开始处理: >>>

HTMLParser会对html文档进行解析处理

=============================================

代码部分:

=============================================

 #python html.parser

 #Author  : Hongten
#Mailto : hongtenzone@foxmail.com
#Blog : http://www.cnblogs.com/hongten
#QQ : 648719819
#Create : 2013-08-26
#Version : 1.0 import os
from html.parser import HTMLParser '''
在HTMLParser类中,定义了很多的方法,但是很多方法都是没有实现的,
这需要我们继承HTMLParser类,自己去实现一些方法
如: # Overridable -- handle start tag
def handle_starttag(self, tag, attrs):
pass # Overridable -- handle end tag
def handle_endtag(self, tag):
pass # Overridable -- handle character reference
def handle_charref(self, name):
pass # Overridable -- handle entity reference
def handle_entityref(self, name):
pass # Overridable -- handle data
def handle_data(self, data):
pass # Overridable -- handle comment
def handle_comment(self, data):
pass # Overridable -- handle declaration
def handle_decl(self, decl):
pass # Overridable -- handle processing instruction
def handle_pi(self, data):
pass ''' #global var
HTML_FILE = ''
HTML_STR = '' class MyHTMLParser(HTMLParser):
'''
MyHTMLParser类继承HTMLParser类,
然后去实现HTMLParser的一些方法
'''
def handle_starttag(self, tag, attrs):
print("遇到起始标签:{} 开始处理:{}".format(tag, tag))
def handle_endtag(self, tag):
print("遇到结束标签:{} 开始处理:{}".format(tag, tag))
def handle_data(self, data):
print("遇到数据:{} 开始处理:{}".format(data, data))
def handle_comment(self, data):
print('遇到注释:{} 开始处理:{}'.format(data, data))
def handle_decl(self, decl):
print('遇到声明:{} 开始处理:{}'.format(decl, decl)) def parser_test(html_str):
'''解析html源文件'''
parser = MyHTMLParser(strict = False)
parser.feed(html_str)
parser.close() def read_html_file(path):
'''读取html文件源文件信息'''
content = ''
if os.path.exists(path):
print('开始读取文件:[{}]'.format(path))
with open(path, 'r') as pf:
for line in pf:
content += line
pf.close()
return content
else:
print('the path [{}] dosen\'t exist!'.format(path))
return content def init():
#html源文件位置
global HTML_FILE
HTML_FILE = 'c:\\test\\hongten.html'
#html源文件的内容
global HTML_STR
HTML_STR = read_html_file(HTML_FILE) def main():
init()
print('源html:\n{}'.format(HTML_STR))
print('#' * 50)
parser_test(HTML_STR) if __name__ == '__main__':
main()

python开发_HTMLParser_html文档解析的更多相关文章

  1. python开发_tarfile_文档归档压缩|解压缩

    ''' python中的tarfile模块实现文档的归档压缩和解压缩 功能: 把工作空间下面的所有文件,打包生成一个tar文件 同时提供一个方法把该tar文件中的一些文件解压缩到 指定的目录中 ''' ...

  2. 【转】Python之xml文档及配置文件处理(ElementTree模块、ConfigParser模块)

    [转]Python之xml文档及配置文件处理(ElementTree模块.ConfigParser模块) 本节内容 前言 XML处理模块 ConfigParser/configparser模块 总结 ...

  3. ios-XML文档解析之SAX解析

    首先SAX解析xml *xml文档的格式特点是节点,大体思路是把每个最小的子节点作为对象的属性,每个最小子节点的'父'节点作为对象,将节点转化为对象,输出. 每个节点都是成对存在的,有开始有结束.有始 ...

  4. WEB前端开发规范文档(转)

    http://codeguide.bootcss.com/  编写灵活.稳定.高质量的 HTML 和 CSS 代码的规范上面的文档 再结合下面的规范: 无论是从技术角度还是开发视角,对于web前端开发 ...

  5. python+selenium自动化软件测试(第12章):Python读写XML文档

    XML 即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进 行定义的源语言.xml 有如下特征: 首先,它是有标签对组成:<aa></aa> ...

  6. 网站开发进阶(三十八)Web前端开发规范文档你需要知道的事

    Web前端开发规范文档你需要知道的事 规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进 ...

  7. Web前端开发规范文档你需要知道的事

    Web前端开发规范文档你需要知道的事 规范目的 为提高团队协作效率, 便于后台人员添加功能及前端后期优化维护, 输出高质量的文档, 特制订此文档. 本规范文档一经确认, 前端开发人员必须按本文档规范进 ...

  8. WEB前端开发规范文档[转]

    为新项目写的一份规范文档, 分享给大家. 我想前端开发过程中, 无论是团队开发, 还是单兵做站, 有一份开发文档做规范, 对开发工作都是很有益的. 本文档由本人编写, 部分意见来源于网络, 以此感谢, ...

  9. 使用Python操作Excel文档(一)

    Python | 使用Python操作Excel文档(一) 0 前言 在阅读本文之前,请确保您已满足或可能满足以下条件: 请确保您具备基本的Python编程能力. 请确保您会使用Excel. 请确保您 ...

随机推荐

  1. Django中六个常用的自定义装饰器

    装饰器作用 decorator是当今最流行的设计模式之一,很多使用它的人并不知道它是一种设计模式.这种模式有什么特别之处? 有兴趣可以看看Python Wiki上例子,使用它可以很方便地修改对象行为, ...

  2. order by 的列名不能参数化,要拼sql

    from T_COMPANY c join T_COMPANY_POSITION p on c.ID = p.COMPANYID order by :type desc nulls last; 最初不 ...

  3. 03 Go 1.3 Release Notes

    Go 1.3 Release Notes Introduction to Go 1.3 Changes to the supported operating systems and architect ...

  4. Codeforces 734C Anton and Making Potions(枚举+二分)

    题目链接:http://codeforces.com/problemset/problem/734/C 题目大意:要制作n个药,初始制作一个药的时间为x,魔力值为s,有两类咒语,第一类周瑜有m种,每种 ...

  5. sql 修改列名及表名 sp_rename

    因需求变更要改表的列名,平常都是跑到Enterprise manager中选取服务器->数据库->表,然后修改表,这样太麻烦了,查了一下,可以用script搞定, 代码如下: EXEC s ...

  6. html meta标签使用总结(转)

    之前学习前端中,对meta标签的了解仅仅只是这一句. <meta charset="UTF-8"> 但是打开任意的网站,其head标签内都有一列的meta标签.比如我博 ...

  7. HBase(八)HBase的协处理器

    一.协处理器简介 1. 起源 Hbase 作为列族数据库最经常被人诟病的特性包括:无法轻易建立“二级索引”,难以执 行求和.计数.排序等操作.比如,在旧版本的(<0.92)Hbase 中,统计数 ...

  8. 在ASP.NET Web API和ASP.NET Web MVC中使用Ninject

    先附上源码下载地址 一.准备工作 1.新建一个名为MvcDemo的空解决方案 2.新建一个名为MvcDemo.WebUI的空MVC应用程序 3.使用NuGet安装Ninject库   二.在ASP.N ...

  9. Kylin使用笔记-1: 安装

    2016年1月14日 9:57:23 星期四 背景介绍     Apache Kylin是一个开源的分布式分析引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最 ...

  10. 【LOJ】#2292. 「THUSC 2016」成绩单

    题解 神仙dp啊><(也有可能是我菜) 我们发现,想要拿一段区间的话,只和这个区间的最大值和最小值有关系,那么我们考虑,如果一个区间[l,r]我们拿走了一些数后,使它的最小值是a,最大值是 ...