'''
在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 = "1">
<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文档进行解析处理
=============================================
代码部分:
=============================================
1 #python html.parser
2
3 #Author : Hongten
4 #Mailto : hongtenzone@foxmail.com
5 #Blog : http://www.cnblogs.com/hongten
6 #QQ : 648719819
7 #Create : 2013-08-26
8 #Version : 1.0
9
10 import os
11 from html.parser import HTMLParser
12
13 '''
14 在HTMLParser类中,定义了很多的方法,但是很多方法都是没有实现的,
15 这需要我们继承HTMLParser类,自己去实现一些方法
16 如:
17
18 # Overridable -- handle start tag
19 def handle_starttag(self, tag, attrs):
20 pass
21
22 # Overridable -- handle end tag
23 def handle_endtag(self, tag):
24 pass
25
26 # Overridable -- handle character reference
27 def handle_charref(self, name):
28 pass
29
30 # Overridable -- handle entity reference
31 def handle_entityref(self, name):
32 pass
33
34 # Overridable -- handle data
35 def handle_data(self, data):
36 pass
37
38 # Overridable -- handle comment
39 def handle_comment(self, data):
40 pass
41
42 # Overridable -- handle declaration
43 def handle_decl(self, decl):
44 pass
45
46 # Overridable -- handle processing instruction
47 def handle_pi(self, data):
48 pass
49
50 '''
51
52 #global var
53 HTML_FILE = ''
54 HTML_STR = ''
55
56 class MyHTMLParser(HTMLParser):
57 '''
58 MyHTMLParser类继承HTMLParser类,
59 然后去实现HTMLParser的一些方法
60 '''
61 def handle_starttag(self, tag, attrs):
62 print("遇到起始标签:{} 开始处理:{}".format(tag, tag))
63 def handle_endtag(self, tag):
64 print("遇到结束标签:{} 开始处理:{}".format(tag, tag))
65 def handle_data(self, data):
66 print("遇到数据:{} 开始处理:{}".format(data, data))
67 def handle_comment(self, data):
68 print('遇到注释:{} 开始处理:{}'.format(data, data))
69 def handle_decl(self, decl):
70 print('遇到声明:{} 开始处理:{}'.format(decl, decl))
71
72
73 def parser_test(html_str):
74 '''解析html源文件'''
75 parser = MyHTMLParser(strict = False)
76 parser.feed(html_str)
77 parser.close()
78
79
80 def read_html_file(path):
81 '''读取html文件源文件信息'''
82 content = ''
83 if os.path.exists(path):
84 print('开始读取文件:[{}]'.format(path))
85 with open(path, 'r') as pf:
86 for line in pf:
87 content += line
88 pf.close()
89 return content
90 else:
91 print('the path [{}] dosen\'t exist!'.format(path))
92 return content
93
94 def init():
95 #html源文件位置
96 global HTML_FILE
97 HTML_FILE = 'c:\\test\\hongten.html'
98 #html源文件的内容
99 global HTML_STR
100 HTML_STR = read_html_file(HTML_FILE)
101
102 def main():
103 init()
104 print('源html:\n{}'.format(HTML_STR))
105 print('#' * 50)
106 parser_test(HTML_STR)
107
108 if __name__ == '__main__':
109 main()
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有