python?????????????????????HTML??????HtmlParser

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python?????????????????????HTML??????HtmlParser相关的知识,希望对你有一定的参考价值。

?????????www.   star   tag   sel   ??????   http   ??????   rtt   tool   

????????????https://www.cnblogs.com/masako/p/5868367.html

HtmlParser???????????????????????????Html??????????????????python????????????

?????????????????????????????????

??????HtmlParser??????????????????????????????????????????????????????????????????????????????????????????????????????????????????

??????1.???????????????

????????????lasttag??????????????????????????????????????????????????????

??????2.??????????????????

????????????handle_starttag(tag, attrs) ??????????????????????????????<div>????????????attrs????????????????????????????????????????????????????????????
????????????handle_endtag(tag) ?????????????????????,??????</div>
????????????handle_startendtag(tag, attrs) ????????????????????????????????????<img />
????????????handle_data(data) ???????????????????????????????????????
????????????handle_comment(data) ??????????????????<!-- -->???????????????

 

??????????????????

???????????????????????????

??????????????????
from html.parser import HTMLParser


class MyHTMLParser(HTMLParser):

    def handle_starttag(self, tag, attrs):
        """
        recognize start tag, like <div>
        :param tag:
        :param attrs:
        :return:
        """
        print("Encountered a start tag:", tag)

    def handle_endtag(self, tag):
        """
        recognize end tag, like </div>
        :param tag:
        :return:
        """
        print("Encountered an end tag :", tag)

    def handle_data(self, data):
        """
        recognize data, html content string
        :param data:
        :return:
        """
        print("Encountered some data  :", data)

    def handle_startendtag(self, tag, attrs):
        """
        recognize tag that without endtag, like <img />
        :param tag:
        :param attrs:
        :return:
        """
        print("Encountered startendtag :", tag)

    def handle_comment(self,data):
        """

        :param data:
        :return:
        """
        print("Encountered comment :", data)


parser = MyHTMLParser()
parser.feed(???<html><head><title>Test</title></head>???
            ???<body><h1>Parse me!</h1><img src = "" />???
            ???<!-- comment --></body></html>???)
??????????????????

?????????????????????python???????????????????????????????????????????????????html???????????????????????????????????????????????????????????????????????????????????????????????????

 

??????????????????

??????????????????????????????????????????????????????????????????????????????????????????????????????

???????????????html?????????

??????????????????
<html>
    <head>
        <title>Test</title>
    </head>
    <body>
        <h1>Parse me!</h1>
        <img src = "" />
        <p>A paragraph.</p>
                <p class = "p_font">A paragraph with class.</p>
                <!-- comment -->
        <div>
            <p>A paragraph in div.</p>
        </div>
    </body>
</html>
    
??????????????????

??????1.???????????????????????????????????????????????????????????????????????????????????????????????????????????????

def _attr(attrlist, attrname):
    for attr in attrlist:
        if attr[0] == attrname:
            return attr[1]
    return None

??????2.????????????p??????????????????????????????????????????handle_data

def handle_data(self, data):
    if self.lasttag == ???p???:
        print("Encountered p data  :", data)

??????3.??????css?????????class??????p_font???p?????????????????????????????????1???????????????????????????????????????????????????????????????

??????????????????
def __init__(self):
    HTMLParser.__init__(self)
    self.flag = False

def handle_starttag(self, tag, attrs):
    if tag == ???p??? and _attr(attrs, ???class???) == ???p_font???:
        self.flag = True
        
def handle_data(self, data):
    if self.flag == True:
        print("Encountered p data  :", data)
??????????????????

??????4.??????p?????????????????????

def handle_starttag(self, tag, attrs):
    if tag == ???p???:
        print("Encountered p attrs  :", attrs)

??????5.??????p?????????class??????

def handle_starttag(self, tag, attrs):
    if tag == ???p??? and _attr(attrs, ???class???):
        print("Encountered p class  :", _attr(attrs, ???class???))

??????6.??????div??????p???????????????

??????????????????
def __init__(self):
    HTMLParser.__init__(self)
    self.in_div = False

def handle_starttag(self, tag, attrs):
    if tag == ???div???:
        self.in_div = True
        
def handle_data(self, data):
    if self.in_div == True and self.lasttag == ???p???:
        print("Encountered p data  :", data)
??????????????????

??????7.??????????????????????????????????????????????????????????????????????????????????????????

??????  ???????????????????????????????????????HTMLParser????????????????????????handle_comment???????????????????????????????????????????????????

??????  ?????????MyHTMLParser???????????????????????????MyHTMLParser????????????????????????

??????????????????
class CommentHTMLParser(HTMLParser):
    def __init__(self):
        HTMLParser.__init__(self)
        
    def handle_comment(self,data):
        cparser = MyHTMLParser()
        cparser.feed(data)    
??????????????????

 





以上是关于python?????????????????????HTML??????HtmlParser的主要内容,如果未能解决你的问题,请参考以下文章

Python代写,Python作业代写,代写Python,代做Python

Python开发

Python,python,python

Python 介绍

Python学习之认识python

python初识