python html模块调用_Python html 模块简介
1 html.entities HTML 實體
name2codepoint 將 HTML 實體名稱映射到 Unicode 代碼點:
html5 將 HTML5 命名字符引用映射到等效的 Unicode 字符
elements = {k:v for k, v in html5.items()}
比如:
codepoint2name 將 Unicode 代碼點映射到 HTML 實體名稱
將 HTML 實體名稱映射到字符(如果字符不在 Latin-1 范圍內,則映射為字符引用)
from html.entities import entitydefs
比如,數學符號
,
,可以直接獲得:
2 escape(s, quote=True)
escape 將特殊字符 &,< 和 > 替換為HTML安全序列。如果可選的 flags quote 為 True(默認值),則還會翻譯引號字符,包括雙引號(")和單引號(')字符。
3 html.unescape(s)
將字符串 s 中的所有命名和數字字符引用 (例如 >, >, >) 轉換為相應的 Unicode 字符。此函數使用 HTML 5 標準為有效和無效字符引用定義的規則,以及 HTML 5 命名字符引用列表。
4 html.parser --- 簡單的 HTML 和 XHTML 解析器
這個模塊定義了一個 HTMLParser 類,為 HTML(超文本標記語言)和 XHTML 文本文件解析提供基礎。
class html.parser.HTMLParser(*, convert_charrefs=True) 創建一個能解析無效標記的解析器實例。查找標簽(tags)和其他標記(markup)并調用 handler 函數。
用法:
p = HTMLParser()
p.feed(data)
...
p.close()
通過調用 self.handle_starttag 處理開始標簽,或通過調用 self.handle_startendtag 處理結束標簽。標簽之間的數據通過以 data 為參數調用 self.handle_data 從解析器傳遞到派生類(數據可以分成任意塊)。如果 convert_charrefs 為 True,則將字符引用自動轉換為相應的 Unicode 字符(并且 self.handle_data 不再拆分成塊),否則通過調用帶有字符串的 self.handle_entityref 或 self.handle_charref 來傳遞它們以分別包含命名或數字引用作為參數。如果 convert_charrefs 為 True (默認值),則所有字符引用( script/style 元素中的除外)都會自動轉換為相應的 Unicode 字符。
一個 HTMLParser 類的實例用來接受 HTML 數據,并在標記開始、標記結束、文本、注釋和其他元素標記出現的時候調用對應的方法。要實現具體的行為,請使用 HTMLParser 的子類并重載其方法。
這個解析器不檢查結束標記是否與開始標記匹配,也不會因外層元素完畢而隱式關閉了的元素引發結束標記處理。
下面是簡單的 HTML 解析器的一個基本示例,使用 HTMLParser 類,當遇到開始標記、結束標記以及數據的時候將內容打印出來。
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print("Encountered a start tag:", tag)
def handle_endtag(self, tag):
print("Encountered an end tag :", tag)
def handle_data(self, data):
print("Encountered some data :", data)
parser = MyHTMLParser()
parser.feed('
Test''
Parse me!
')輸出:
Encountered a start tag: html
Encountered a start tag: head
Encountered a start tag: title
Encountered some data : Test
Encountered an end tag : title
Encountered an end tag : head
Encountered a start tag: body
Encountered a start tag: h1
Encountered some data : Parse me!
Encountered an end tag : h1
Encountered an end tag : body
Encountered an end tag : html
HTMLParser.reset() 重置實例。丟失所有未處理的數據。在實例化階段被隱式調用。
HTMLParser.feed(data) 填充一些文本到解析器中。如果包含完整的元素,則被處理;如果數據不完整,將被緩沖直到更多的數據被填充,或者 close() 被調用。data 必須為 str 類型。
HTMLParser.close() 如同后面跟著一個文件結束標記一樣,強制處理所有緩沖數據。這個方法能被派生類重新定義,用于在輸入的末尾定義附加處理,但是重定義的版本應當始終調用基類 HTMLParser 的 close() 方法。
HTMLParser.getpos() 返回當前行號和偏移值。
HTMLParser.get_starttag_text() 返回最近打開的開始標記中的文本。結構化處理時通常應該不需要這個,但在處理“已部署”的 HTML 或是在以最小改變來重新生成輸入時可能會有用處(例如可以保留屬性間的空格等)。
下列方法將在遇到數據或者標記元素的時候被調用。他們需要在子類中重載?;惖膶崿F中沒有任何實際操作(除了 handle_startendtag() ):
HTMLParser.handle_starttag 這個方法在標簽開始的時候被調用(例如:
)。tag 參數是小寫的標簽名。attrs 參數是一個 (name, value) 形式的列表,包含了所有在標記的 <> 括號中找到的屬性。name 轉換為小寫,value 的引號被去除,字符和實體引用都會被替換。比如,對于標簽 ,這個方法將以下列形式被調用 handle_starttag('a', [('href', 'https://www.cwi.nl/')])。html.entities 中的所有實體引用,會被替換為屬性值。HTMLParser.handle_endtag(tag) 此方法被用來處理元素的結束標記(例如:
)。tag 參數是小寫的標簽名。HTMLParser.handle_startendtag(tag, attrs) 類似于 handle_starttag(), 只是在解析器遇到 XHTML 樣式的空標記時被調用( )。這個方法能被需要這種特殊詞法信息的子類重載;默認實現僅簡單調用 handle_starttag() 和 handle_endtag() 。
HTMLParser.handle_data(data) 這個方法被用來處理任意數據(例如:文本節點和 以及 中的內容)。
HTMLParser.handle_entityref(name) 這個方法被用于處理 &name; 形式的命名字符引用(例如 >),其中 name 是通用的實體引用(例如:'gt')。如果 convert_charrefs 為 True,該方法永遠不會被調用。
HTMLParser.handle_charref(name) 這個方法被用來處理 NNN; 和 NNN; 形式的十進制和十六進制字符引用。例如,> 等效的十進制形式為 >,而十六進制形式為 > ;在這種情況下,方法將收到 '62' 或 'x3E'。如果 convert_charrefs 為 True,則該方法永遠不會被調用。
HTMLParser.handle_comment(data) 這個方法在遇到注釋的時候被調用(例如: )。例如, 這個注釋會用 ' comment ' 作為參數調用此方法。
Internet Explorer 條件注釋(condcoms)的內容也被發送到這個方法,因此,對于 ``,這個方法將接收到 '[if IE 9]>IE9-specific content
HTMLParser.handle_decl(decl) 這個方法用來處理 HTML doctype 申明(例如 )。decl 形參為 標記中的所有內容(例如:'DOCTYPE html')。
HTMLParser.handle_pi(data) 此方法在遇到處理指令的時候被調用。data 形參將包含整個處理指令。例如,對于處理指令 <?proc color='red'>,這個方法將以 handle_pi("proc color='red'") 形式被調用。它旨在被派生類重載;基類實現中無任何實際操作。
注解:HTMLParser 類使用 SGML 語法規則處理指令。使用 '?' 結尾的 XHTML 處理指令將導致 '?' 包含在 data 中。
HTMLParser.unknown_decl(data) 當解析器讀到無法識別的聲明時,此方法被調用。data 形參為 標記中的所有內容。某些時候對派生類的重載很有用?;悓崿F中無任何實際操作。
因此,我們可以如此定義:
from typing import List, Optional, Tuple
from html.parser import HTMLParser
class HTMLParserHint(HTMLParser):
def __init__(self, *, convert_charrefs: bool = ...) -> None:
super().__init__(convert_charrefs=convert_charrefs)
def feed(self, feed: str) -> None: ...
def close(self) -> None: ...
def reset(self) -> None: ...
def getpos(self) -> Tuple[int, int]: ...
def get_starttag_text(self) -> Optional[str]: ...
def handle_starttag(self, tag: str,
attrs: List[Tuple[str, Optional[str]]]) -> None: ...
def handle_endtag(self, tag: str) -> None: ...
def handle_startendtag(self, tag: str,
attrs: List[Tuple[str, Optional[str]]]) -> None: ...
def handle_data(self, data: str) -> None: ...
def handle_entityref(self, name: str) -> None: ...
def handle_charref(self, name: str) -> None: ...
def handle_comment(self, data: str) -> None: ...
def handle_decl(self, decl: str) -> None: ...
def handle_pi(self, data: str) -> None: ...
def unknown_decl(self, data: str) -> None: ...
5 HTML 解析示例
下面介紹如何解析 HTML 文檔。
from html.parser import HTMLParser
from html.entities import name2codepoint
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print("Start tag:", tag)
for attr in attrs:
print(" attr:", attr)
def handle_endtag(self, tag):
print("End tag :", tag)
def handle_data(self, data):
print("Data :", data)
def handle_comment(self, data):
print("Comment :", data)
def handle_entityref(self, name):
c = chr(name2codepoint[name])
print("Named ent:", c)
def handle_charref(self, name):
if name.startswith('x'):
c = chr(int(name[1:], 16))
else:
c = chr(int(name))
print("Num ent :", c)
def handle_decl(self, data):
print("Decl :", data)
parser = MyHTMLParser()
解析一個文檔類型聲明:
解析一個具有一些屬性和標題的元素:
script 和 style 元素中的內容原樣返回,無需進一步解析:
解析注釋:
解析命名或數字形式的字符引用,并把他們轉換到正確的字符(注意:這 3 種轉義都是 '>'):
填充不完整的塊給 feed() 執行,handle_data() 可能會多次調用(除非 convert_charrefs 被設置為 True ):
解析無效的 HTML (例如:未引用的屬性)也能正常運行:
總結
以上是生活随笔為你收集整理的python html模块调用_Python html 模块简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java爬虫下载图片到磁盘_java入门
- 下一篇: 64位java怎么安装使用_如何在64位