HTMLParser類的定義及常用方法
類的定義
- HTMLParser主要是用來解析HTML文件(包括HTML中無效的標記)。
- 參數convert_charrefs表示是否將所有的字符引用自動轉化為Unicode形式,Python3.5以后默認是True。
- HTMLParser可以接收相應的HTML內容,並進行解析,遇到HTML的標簽會自動調用相應的handler(處理方法)來處理,用戶需要自己創建相應的子類來繼承HTMLParser,並且復寫相應的handler方法。
- HTMLParser不會檢查開始標簽和結束標簽是否是一對。
常用方法
- HTMLParser.feed(data):接收一個字符串類型的HTML內容,並進行解析。
- HTMLParser.close():當遇到文件結束標簽后進行的處理方法。如果子類要復寫該方法,需要首先調用HTMLParser累的close()。
- HTMLParser.reset():重置HTMLParser實例,該方法會丟掉未處理的html內容。
- HTMLParser.getpos():返回當前行和相應的偏移量。
- HTMLParser.handle_starttag(tag, attrs):對開始標簽的處理方法。例如<div id="main">,參數tag指的是div,attrs指的是一個(name,Value)的列表,即列表里面裝的數據是元組。
- HTMLParser.handle_endtag(tag):對結束標簽的處理方法。例如</div>,參數tag指的是div。
- HTMLParser.handle_startendtag(tag, attrs):識別沒有結束標簽的HTML標簽,例如<img />等。
- HTMLParser.handle_data(data):對標簽之間的數據的處理方法。<tag>test</tag>,data指的是“test”。
- HTMLParser.handle_comment(data):對HTML中注釋的處理方法。
解釋部分:
- tag表示的是html標簽,attrs是一個列表,列表元素為一個個“(屬性,值)”形式的元組。
- HTMLParser會自動將tag和attrs都轉為小寫。
實例應用
try:
from HTMLParser import HTMLParser
except:
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.data = [] # 定義data數組用來存儲html中的數據
self.links = []
def handle_starttag(self, tag, attrs):
print('<%s>' % tag)
if tag == "a":
if len(attrs) == 0: pass
else:
for (variable, value) in attrs:
if variable == "href":
self.links.append(value)
def handle_endtag(self, tag):
print('</%s>' % tag)
def handle_startendtag(self, tag, attrs):
print('<%s/>' % tag)
def handle_data(self, data):
print('data===>', data)
def handle_comment(self, data):
print('<!--', data, '-->')
def handle_entityref(self, name):
print('&%s;' % name)
def handle_charref(self, name):
print('&#%s;' % name)
if __name__ == "__main__":
html_code = '''<html>
<head>這是頭標簽</head>
<body>
<!-- test html parser -->
<p>Some <a href=\"#\">html</a> HTML Ӓ Ӓtutorial...<br>END</p>
</body></html>'''
parser = MyHTMLParser()
parser.feed(html_code)
parser.close()
print(parser.data)
print(parser.links)
處理HTML轉義字符
在 HTML 中 <、>、& 等字符有特殊含義(<,> 用於標簽中,& 用於轉義),他們不能在 HTML 代碼中直接使用,如果要在網頁中顯示這些符號,就需要使用 HTML 的轉義字符串(Escape Sequence),例如 < 的轉義字符是 <,瀏覽器渲染 HTML 頁面時,會自動把轉移字符串換成真實字符。
轉義字符(Escape Sequence)由三部分組成:第一部分是一個 & 符號,第二部分是實體(Entity)名字,第三部分是一個分號。 比如,要顯示小於號(<),就可以寫 <。
html = '<abc>'
# 反轉義:方式1
try:
from HTMLParser import HTMLParser
except:
from html.parser import HTMLParser
html_parser = HTMLParser()
text = html_parser.unescape(html)
print(text)
# 反轉義:方式2
import html
text = html.unescape('a=1&b=2')
print(text)
# 轉義
import cgi
html = cgi.escape(text)
print(html)
https://www.liaoxuefeng.com/wiki/897692888725344/966401234683424
https://www.liaoxuefeng.com/wiki/1016959663602400/1017784593019776
https://baijiahao.baidu.com/s?id=1637614366297669334&wfr=spider&for=pc
