日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python html模块调用_Python html 模块简介

發布時間:2025/3/21 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 或是在以最小改變來重新生成輸入時可能會有用處(例如可以保留屬性間的空格等)。

下列方法將在遇到數據或者標記元素的時候被調用。他們需要在子類中重載。基類的實現中沒有任何實際操作(除了 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 形參為 標記中的所有內容。某些時候對派生類的重載很有用。基類實現中無任何實際操作。

因此,我們可以如此定義:

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 模块简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。