'''
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. 一步一步搭建11gR2 rac+dg之配置单实例的DG(八)【转】

    RAC主库配置单实例ActiveDataguard 本文文档结构: 这里配置的过程中需要注意的一项是多看看rac1和rac2以及dg的告警日志会对配置过程有更深刻的理解...配置oracle rac的 ...

  2. 2013 NEERC

    2013 NEERC Problem A. ASCII Puzzle 题目描述:完成一个拼图. solution 暴搜,但好像挺难打的,但听说因为题目限制比较多,其实很多奇怪的情况都不存在. Prob ...

  3. springquartz的LocalDataSourceJobStore

    spring 为quartz 提供了一个 继承 JobStoreCMT的 LocalDataSourceJobStore,主要是为了和spring更好的集成. public class LocalDa ...

  4. 教你用DrawLayout 实现Android 侧滑菜单

    现在的APP越来越注重用户体验,百度视频客户端有一个特效还是挺吸引人的,在主界面手指向右滑动,就可以将菜单展示出来,而主界面会被隐藏大部分,但是仍有左侧的一小部分同菜单一起展示.类似的还有天天动听,人 ...

  5. python网络编程-socket“粘包”(小数据发送问题)

    一:什么是粘包 “粘包”, 即服务器端你调用时send 2次,但你send调用时,数据其实并没有立刻被发送给客户端,而是放到了系统的socket发送缓冲区里,等缓冲区满了.或者数据等待超时了,数据才会 ...

  6. day11作业

    一.选择题 1.B 2.D 3.AB 4.C 二.判断题 1.× 2.√ 三.简答题 1. 多态就是事物存在的多种形态. 提高程序的复用性,提高程序的可扩展性和可维护性. 2. 向上转型是指父类引用指 ...

  7. Robust Mesh Watermarking

    之前看了一篇题为"Robust Mesh Watermarking"的论文,查阅资料的时候发现了一篇与之很相似的名为"三维模型数字水印系统的设计与实现"的中文论 ...

  8. sql 修改列名及表名 sp_rename

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

  9. LeetCode664. Strange Printer

    There is a strange printer with the following two special requirements: The printer can only print a ...

  10. python 删除前3天的文件

    一.需求分析 1. 删除前3天的文件 2.如果目录为空,也一并删除掉 如果使用shell脚本,一条命令就搞定了.干啥还要用python? 1. 因为需要记录一些日志,使用shell不好实现 2. 作为 ...