本答案頁包含 Python HTML 解析 的 4 道選擇題、4 道填空題和 4 道輸出預測題,每題都給出準確答案和簡短解釋。
答案已完整展示,建議先嘗試作答,再用本頁核對。第一次練習最好從互動練習頁開始。
哪個方法處理開始標籤?
答案: handle_starttag
為什麼: handle_starttag 接收標籤名和屬性鍵值對。
attrs 參數是什麼?
答案: 由 (名稱, 值) 組成的列表
為什麼: 需要按屬性名尋找時,用 dict 轉換 attrs。
哪個方法接收標籤之間的文字?
答案: handle_data
為什麼: handle_data 接收標籤之間找到的文位元組點。
執行結果是什麼?
from html.parser import HTMLParser
class P(HTMLParser):
def __init__(self):
super().__init__()
self.tags = []
def handle_starttag(self, tag, attrs):
self.tags.append(tag)
p = P()
p.feed("<h1>A</h1><p>B</p>")
print(p.tags)答案: ['h1', 'p']
為什麼: 處理器按文件順序記錄每個開始標籤的名稱。
補全 HTML 解析器匯入。
from html.parser import ____答案: HTMLParser
為什麼: HTMLParser 是標準函式庫提供的解析器基類。
補全自定義解析器的基類。
from html.parser import HTMLParser
class P(____):
def handle_starttag(self, tag, attrs):
print(tag)
p = P()
p.feed("<a href='/a'>A</a>")答案: HTMLParser
為什麼: 自定義解析器繼承 HTMLParser。
補全處理 HTML 文字的呼叫。
from html.parser import HTMLParser
class P(HTMLParser):
def handle_starttag(self, tag, attrs):
print(tag)
p = P()
p.____("<a href='/a'>A</a>")答案: feed
為什麼: feed 把 HTML 字串送入解析器。
補全處理開始標籤的方法名。
from html.parser import HTMLParser
class P(HTMLParser):
def ____(self, tag, attrs):
print(tag)
p = P()
p.feed("<a href='/a'>A</a>")答案: handle_starttag
為什麼: handle_starttag 會在每個開始標籤處呼叫。
這段程式列印出什麼?
from html.parser import HTMLParser
class P(HTMLParser):
def __init__(self):
super().__init__()
self.links = []
def handle_starttag(self, tag, attrs):
values = dict(attrs)
if tag == "a" and values.get("href"):
self.links.append(values["href"])
p = P()
p.feed('<a href="/a">A</a><a href="/b">B</a>')
print(p.links)答案: ['/a', '/b']
為什麼: 兩個 a 標籤都有 href 屬性,所以兩個值都會被收集。
程式碼的輸出結果是什麼?
from html.parser import HTMLParser
class P(HTMLParser):
def __init__(self):
super().__init__()
self.parts = []
def handle_data(self, data):
text = data.strip()
if text:
self.parts.append(text)
p = P()
p.feed("<h1>Title</h1><p>Body</p>")
print(" | ".join(p.parts))答案: Title | Body
為什麼: 兩個非空文位元組點用豎線連接。
螢幕上會顯示什麼?
from html.parser import HTMLParser
class P(HTMLParser):
def __init__(self):
super().__init__()
self.count = 0
def handle_starttag(self, tag, attrs):
if tag == "a":
self.count += 1
p = P()
p.feed('<a href="/a">A</a><a href="/b">B</a>')
print(p.count)答案: 2
為什麼: 解析器遇到兩個開始 a 標籤。
這段程式碼會輸出什麼?
from html import unescape
print(unescape("Tom & Jerry"))答案: Tom & Jerry
為什麼: unescape 把 & 字元引用轉換成 &。
先試一遍題目
打開 Python HTML 解析 練習頁,用即時回饋回答同樣的 12 道題。