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的主要内容,如果未能解决你的问题,请参考以下文章