HTML操作是編程中很重要的一塊,下面用Python3.x中的html.parser中的HTMLParser類來進行HTML的解析。
HTMLParser類定義及常用方法
-
標准庫中的定義
-
- HTMLParser主要是用來解析HTML文件(包括HTML中無效的標記)
- 參數convert_charrefs表示是否將所有的字符引用自動轉化為Unicode形式,Python3.5以后默認是True
- HTMLParser可以接收相應的HTML內容,並進行解析,遇到HTML的標簽會自動調用相應的handler(處理方法)來處理,用戶需要自己創建相應的子類來繼承HTMLParser,並且復寫相應的handler方法
- HTMLParser不會檢查開始標簽和結束標簽是否是一對
-
常用方法
-
- HTMLParser.feed(data):接收一個字符串類型的HTML內容,並進行解析
HTMLParser.
close
():當遇到文件結束標簽后進行的處理方法。如果子類要復寫該方法,需要首先調用HTMLParser累的close()HTMLParser.
reset
():重置HTMLParser實例,該方法會丟掉未處理的html內容HTMLParser.
getpos
():返回當前行和相應的偏移量HTMLParser.
handle_starttag
(tag, attrs):對開始標簽的處理方法。例如<div id="main">,參數tag指的是div,attrs指的是一個(name,Value)的列表HTMLParser.
handle_endtag
(tag):對結束標簽的處理方法。例如</div>,參數tag指的是divHTMLParser.
handle_data
(data):對標簽之間的數據的處理方法。<tag>test</tag>,data指的是“test”HTMLParser.
handle_comment
(data):對HTML中注釋的處理方法。
實例應用
- 待處理文件: http://files.cnblogs.com/files/AlwinXu/Scan_TFS.zip
- 代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
__author__
=
'xua'
import
json
#For python 3.x
from
html.parser
import
HTMLParser
#定義HTMLParser的子類,用以復寫HTMLParser中的方法
class
MyHTMLParser(HTMLParser):
#構造方法,定義data數組用來存儲html中的數據
def
__init__(
self
):
HTMLParser.__init__(
self
)
self
.data
=
[]
#覆蓋starttag方法,可以進行一些打印操作
def
handle_starttag(
self
, tag, attrs):
pass
#print("Start Tag: ",tag)
#for attr in attrs:
# print(attr)
#覆蓋endtag方法
def
handle_endtag(
self
, tag):
pass
#覆蓋handle_data方法,用來處理獲取的html數據,這里保存在data數組
def
handle_data(
self
, data):
if
data.count(
'\n'
)
=
=
0
:
self
.data.append(data)
#讀取本地html文件.(當然也可以用urllib.request中的urlopen來打開網頁數據並讀取,這里不做介紹)
htmlFile
=
open
(r
"/Users/xualvin/Downloads/TFS.htm"
,
'r'
)
content
=
htmlFile.read()
#創建子類實例
parser
=
MyHTMLParser()
#將html數據傳給解析器進行解析
parser.feed(content)
#對解析后的數據進行相應操作並打印
for
item
in
parser.data:
if
item.startswith(
"{\"columns\""
):
payloadDict
=
json.loads(item)
list
=
payloadDict[
"payload"
][
"rows"
]
for
backlog
in
list
:
if
backlog[
1
]
=
=
"Product Backlog Item"
or
backlog[
1
]
=
=
"Bug"
:
print
(backlog[
2
],
" Point: "
,backlog[
3
])
|