Discuss / Python / 看了楼上大佬的代码,仔细分析并重新写一遍

看了楼上大佬的代码,仔细分析并重新写一遍

Topic source

桂兴牛2号

#1 Created at ... [Delete] [Delete and Lock User]

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('----------------------')

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'))


  • 1

Reply