from html.parser import HTMLParser
from urllib import request
import re
class MyHTMLParser(HTMLParser):
def init(self):
#初始化,起始我并太懂super
super(MyHTMLParser,self).__init__()
#设置一个空的标签
self.__parsedate=''
def handle_starttag(self,tag,attr):
#判断数据属性并赋予标签
if ('class','event-title') in attr:
self.__parsedate='name'
if tag=='time':
self.__parsedate='time'
if ('class','say-no-more') in attr:
self.__parsedate='year'
if ('class','event-location') in attr:
self.__parsedate='location'
def handle_endtag(self,tag):
#在HTML结束时,把标签清空
self.__parsedate=''
def handle_data(self,data):
#根据属性标签输出内容
if self.__parsedate=='name':
print('时间: %s'%data)
if self.__parsedate=='time':
print('时间:%s'%data)
if self.__parsedate=='year':
# 因为后面还有两组 say-no-more 后面的data却不是年份信息,所以用正则检测一下
if re.match(r'\s\d{4}', data):
print('年份:%s'%data)
if self.__parsedate=='location':
print('地点:%s'%data)
print('----------------------')
桂兴牛2号
from html.parser import HTMLParser from urllib import request import re
class MyHTMLParser(HTMLParser): def init(self):
url='https://www.python.org/events/python-events/' parse=MyHTMLParser() with request.urlopen(url,timeout=15) as f: data=f.read() parse.feed(data.decode('utf-8'))