Python解析Python官網會議安排
阿新 • • 發佈:2018-12-27
HTMLParser是python用來解析html的模組,它可以分析出html裡面的標籤、資料等。
HTMLParser採用的是一種事件驅動的模式,當HTMLParser找到一個特定的標記時,它會去呼叫一個使用者定義的函式,以此來通知程式處理。它主要的使用者回撥函式的命名都是以handler_開頭的,都是HTMLParser的成員函式。
handle_startendtag 處理開始標籤和結束標籤 handle_starttag 處理開始標籤,比如<xx> handle_endtag 處理結束標籤,比如</xx> handle_charref 處理特殊字串,就是以&#開頭的,一般是內碼錶示的字元 handle_entityref 處理一些特殊字元,以&開頭的,比如 handle_data 處理資料,就是<xx>data</xx>中間的那些資料 handle_comment 處理註釋 handle_decl 處理<!開頭的,比如<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” handle_pi 處理形如<?instruction>的東西
舉例:
#!usr/bin/env python3 # -*- coding:utf-8 -*- from html.parser import HTMLParser from html.entities import name2codepoint class MyHTMLParser2(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.flag=None def handle_starttag(self,tag,attrs): if tag=='h3' and attrs.__contains__(('class','event-title')): print('\n\n會議主題:',end='') self.flag=True #在需要列印的塊中設定標識 elif tag=='time': print('\n會議時間:',end='') self.flag=True elif tag=='span' and attrs.__contains__(('class','event-location')): print('\n會議地址:',end='') self.flag=True def handle_endtag(self,tag): if tag in('h3','time','span'): self.flag=None #print('</%s>' % tag) def handle_startendtag(self,tag,attrs): #print('<%s/>' % tag) pass def handle_data(self,data): #print('----------->%s'%data.strip()) if self.flag: #判斷是需要的值才打印 print('%s' % data,end='') #末尾不換行 def hangle_comment(self,data): #print('<!-- -->') pass def handle_entityref(self,name): #print('====>%s' % name) if name=='ndash': print('至',end='') else: pass def handle_charref(self,name): #print('&#%s;' % name) pass with open('python_meeting.xml','rb') as f: s=f.read() parser=MyHTMLParser2() parser.feed(str(s))
會議主題:PyCon Ghana 2018 會議時間:10 Aug. \xe2\x80\x93 12 Aug. 2018 會議地址:Accra, Ghana 會議主題:PyData Delhi 2018 會議時間:11 Aug. \xe2\x80\x93 13 Aug. 2018 會議地址:New Delhi, India 會議主題:PyCon Korea 2018 會議時間:15 Aug. \xe2\x80\x93 20 Aug. 2018 會議地址:Seoul, South Korea 會議主題:PyBay 2018 會議時間:16 Aug. \xe2\x80\x93 20 Aug. 2018 會議地址:San Francisco, CA, USA 會議主題:PyCon PL 2018 會議時間:23 Aug. \xe2\x80\x93 27 Aug. 2018 會議地址:Ossa, Poland 會議主題:Flask Conference 會議時間:24 Aug. \xe2\x80\x93 26 Aug. 2018 會議地址:S\xc3\xa3o Paulo, Brazil