Python HTML操作(HTMLParser)


HTML操作是編程中很重要的一塊,下面用Python3.x中的html.parser中的HTMLParser類來進行HTML的解析。

HTMLParser類定義及常用方法

  • 標准庫中的定義

    1. HTMLParser主要是用來解析HTML文件(包括HTML中無效的標記)
    2. 參數convert_charrefs表示是否將所有的字符引用自動轉化為Unicode形式,Python3.5以后默認是True
    3. HTMLParser可以接收相應的HTML內容,並進行解析,遇到HTML的標簽會自動調用相應的handler(處理方法)來處理,用戶需要自己創建相應的子類來繼承HTMLParser,並且復寫相應的handler方法
    4. HTMLParser不會檢查開始標簽和結束標簽是否是一對
  • 常用方法

    1. HTMLParser.feed(data):接收一個字符串類型的HTML內容,並進行解析
    2. HTMLParser.close():當遇到文件結束標簽后進行的處理方法。如果子類要復寫該方法,需要首先調用HTMLParser累的close()
    3. HTMLParser.reset():重置HTMLParser實例,該方法會丟掉未處理的html內容
    4. HTMLParser.getpos():返回當前行和相應的偏移量
    5. HTMLParser.handle_starttag(tagattrs):對開始標簽的處理方法。例如<div id="main">,參數tag指的是div,attrs指的是一個(name,Value)的列表
    6. HTMLParser.handle_endtag(tag):對結束標簽的處理方法。例如</div>,參數tag指的是div
    7. HTMLParser.handle_data(data):對標簽之間的數據的處理方法。<tag>test</tag>,data指的是“test”
    8. 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 ])


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM