Python——HTMLParser

来源:互联网 发布:java list 拼接字符串 编辑:程序博客网 时间:2024/06/05 15:01
from html.parser import HTMLParserfrom html.entities import name2codepointfrom urllib import requestclass MyHTMLParser(HTMLParser):    def __init__(self):        super(MyHTMLParser,self).__init__()        self.tag=''        self.flag_h3=''        self.flag_a=''        self.name=''        self.flag_time=''        self.time=''        self.tmp=''        self.flag_loc=''        self.loc=''    def handle_starttag(self, tag, attrs):        self.tag=tag        if self.tag=='h3' and attrs:            for key,val in attrs:                if key=="class" and val=='event-title':                    self.flag_h3=True        if self.tag=='a' and  self.flag_h3:            self.flag_a=True          if self.tag=='time' :            self.flag_time=True            self.tmp=''        if self.tag=='span' and attrs:            for key,val in attrs:                               if key=="class" and val=='event-location':                    self.flag_loc=True    def handle_endtag(self, tag):        if self.flag_h3 and self.flag_a:            print('会议名称:',self.name)            self.flag_a=False            self.flag_h3=False        if self.flag_time:            print('会议时间:',self.time)            self.flag_time=False        if self.flag_loc:            print('会议地点:',self.loc,'\n')            self.flag_loc=False    def handle_data(self, data):        if self.flag_h3 and self.flag_a:            self.name=data        if self.flag_time:             self.tmp+=data            self.time=self.tmp        if self.flag_loc:            self.loc=data    def handle_startendtag(self, tag, attrs):        pass        def handle_comment(self, data):        pass    def handle_entityref(self, name):        pass    def handle_charref(self, name):        passwith request.urlopen('https://www.python.org/events/python-events/') as f:    data=f.read()parser = MyHTMLParser()parser.feed(data.decode('utf-8'))

特殊字符有两种,一种是英文表示的 ,一种是数字表示的Ӓ(Ӓ),这两种字符都可以通过Parser解析出来。

feed()方法可以多次调用,也就是不一定一次把整个HTML字符串都塞进去,可以一部分一部分塞进去。
HTMLParser.close():当遇到文件结束标签后进行的处理方法。如果子类要复写该方法,需要首先调用HTMLParser类的close()
HTMLParser.reset():重置HTMLParser实例,该方法会丢掉未处理的html内容
HTMLParser.getpos():返回当前行和相应的偏移量

handle_startendtag 处理开始标签和结束标签
handle_starttag 处理开始标签,比如<xx>
handle_endtag 处理结束标签,比如</xx>
handle_charref 处理特殊字符串,就是以&#开头的,一般是内码表示的字符&#1234;
handle_entityref 处理一些特殊字符,以&开头的,比如 &nbsp;
handle_data 处理数据,就是<xx>data</xx>中间的那些数据
handle_comment 处理注释
handle_decl 处理<!开头的,比如<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
handle_pi 处理形如<?instruction>的东西

原创粉丝点击