當前位置:首頁 » 編程語言 » python解析本地html

python解析本地html

發布時間: 2023-01-13 03:34:28

① lxml - 用python解析XML和HTML

lxml 是一個非常Pythonic的文檔解析工具包,依賴於C語言庫 libxml2 和 libslt 。它的獨特之處在於高效率與功能的完整性兼備,且提供了簡單易用Python原生API。最新版本的 lxml 支持CPython2.6至3.6的版本。

② 怎麼用python解析html

現在用起來比較方便的有兩種:
1. pyquery (類似Jquery語法,對於js熟悉的人,用這個會比較上手)

2. beatifulsoup:這個功能比較強大,用起來也很方便,目前正在整理筆記中,其中一個亮點就是:可以使用正則來解析有規律的html標簽內容。
還有一個主要的問題:爬取網頁的時候,需要使用http代理。因為有的網站有了方爬取的策略,這部分也在整理中,後續會整理發布。

③ Python網頁解析庫:用requests-html爬取網頁

Python 中可以進行網頁解析的庫有很多,常見的有 BeautifulSoup 和 lxml 等。在網上玩爬蟲的文章通常都是介紹 BeautifulSoup 這個庫,我平常也是常用這個庫,最近用 Xpath 用得比較多,使用 BeautifulSoup 就不大習慣,很久之前就知道 Reitz 大神出了一個叫 Requests-HTML 的庫,一直沒有興趣看,這回可算歹著機會用一下了。

使用 pip install requests-html 安裝,上手和 Reitz 的其他庫一樣,輕松簡單:

這個庫是在 requests 庫上實現的,r 得到的結果是 Response 對象下面的一個子類,多個一個 html 的屬性。所以 requests 庫的響應對象可以進行什麼操作,這個 r 也都可以。如果需要解析網頁,直接獲取響應對象的 html 屬性:

不得不膜拜 Reitz 大神太會組裝技術了。實際上 HTMLSession 是繼承自 requests.Session 這個核心類,然後將 requests.Session 類里的 requests 方法改寫,返回自己的一個 HTMLResponse 對象,這個類又是繼承自 requests.Response,只是多加了一個 _from_response 的方法來構造實例:

之後在 HTMLResponse 里定義屬性方法 html,就可以通過 html 屬性訪問了,實現也就是組裝 PyQuery 來干。核心的解析類也大多是使用 PyQuery 和 lxml 來做解析,簡化了名稱,挺討巧的。

元素定位可以選擇兩種方式:

方法名非常簡單,符合 Python 優雅的風格,這里不妨對這兩種方式簡單的說明:

定位到元素以後勢必要獲取元素裡面的內容和屬性相關數據,獲取文本:

獲取元素的屬性:

還可以通過模式來匹配對應的內容:

這個功能看起來比較雞肋,可以深入研究優化一下,說不定能在 github 上混個提交。

除了一些基礎操作,這個庫還提供了一些人性化的操作。比如一鍵獲取網頁的所有超鏈接,這對於整站爬蟲應該是個福音,URL 管理比較方便:

內容頁面通常都是分頁的,一次抓取不了太多,這個庫可以獲取分頁信息:

結果如下:

通過迭代器實現了智能發現分頁,這個迭代器裡面會用一個叫 _next 的方法,貼一段源碼感受下:

通過查找 a 標簽裡面是否含有指定的文本來判斷是不是有下一頁,通常我們的下一頁都會通過 下一頁 或者 載入更多 來引導,他就是利用這個標志來進行判斷。默認的以列表形式存在全局: ['next','more','older'] 。我個人認為這種方式非常不靈活,幾乎沒有擴展性。 感興趣的可以往 github 上提交代碼優化。

也許是考慮到了現在 js 的一些非同步載入,這個庫支持 js 運行時,官方說明如下:

使用非常簡單,直接調用以下方法:

第一次使用的時候會下載 Chromium,不過國內你懂的,自己想辦法去下吧,就不要等它自己下載了。render 函數可以使用 js 腳本來操作頁面,滾動操作單獨做了參數。這對於上拉載入等新式頁面是非常友好的。

④ python 怎麼提取html內容啊(正則)

python提取html內容的方法。如下參考:

1.首先,打開Python來定義字元串,在定義的字元串後面加上中括弧,然後在要提取的字元位置輸入。

⑤ python html 解析工具是什麼意思

在准備我的 PyCon上關於HTML的演講 的時候我覺得我應該對現有的一些解析器和文檔模型做個性能對比。

實際上,情況有點復雜,因為處理HTML需要幾個步驟:

解析這個 HTML
把它解析為一個對象(比如一個文檔對象)
把它序列化
有些解析器只處理第一步,有些只處理第二步,有些能處理所有的三個步驟…。例如,ElementSoup 使用 ElementTree 來表示文檔,卻使用 BeautifulSoup 作為實際的解析器。而 BeautifulSoup 內部也擁有一個文檔對象。 HTMLParser 僅僅做解析(不解析出任何對象),然而 html5lib 卻能夠生成幾種不同的文檔樹(DOM樹)。序列化也分為XML和HTML兩種方式。

所以我選取了下面這些解析器的庫做基準性能測試:

lxml:包含一個解析器,能夠產生文檔對象,支持HTML序列化。它也可以不適用內置的解析器而使用 BeautifulSoup 或者 html5lib 進行解析。
BeautifulSoup:nbsp;包含一個解析器,能夠產生文檔對象,支持HTML序列化。
html5lib:有解析器。它也有一個序列化器,但是我沒有使用它。它也有一個內置的文檔對象(即simpletree),只是…除了自我測試我也不知道這東西還能做什麼。
ElementTree:這個包里有一個XML序列化器,ElementTree能夠產生文檔對象,它也是python內置的XML解析模塊。(我覺得下個版本會帶一個HTML序列化器,不過我也沒測試這個XML序列化器)。它也有一個解析器,測試的時候我用html5lib當做解析器來測試ElementTree的。
cElementTree:這是一個使用C語言擴展實現的python模塊,實現了ElementTree。
HTMLParser:包含一個解析器。但是其實它不能解析出文檔對象,很多正常網頁都不能正常處理(包含Table或者Script),有語法錯誤的網頁就更處理不了了。它只是使用解析器遍歷文檔。
htmlfill:它使用了HTMLParser作為解析器,相對HTMLParser,它在解析過程中對Element做了更多處理。
Genshi[1]:包含一個解析器,能夠產生文檔對象,支持HTML序列化。
xml.dom.minidom:python標准庫里的內置文檔模型,html5lib 能夠解析出這種文檔對象。(我並不推薦使用minidom — 這篇文章里寫了一些理由,還有很多理由我沒寫出來)
我預想 lxml 的性能會比較好,因為它基於 libxml2這個C庫。但是實際上它的性能比我預計的還要好,超過其它所有的同類庫。所以,除非考慮到一些難以解決的安裝問題(尤其是在Mac上),我都推薦你用lxml 來進行HTML解析的工作。

我的測試代碼在這里,你可以自己下載下來運行測試程序。裡麵包含了所有的樣例數據,用來生成圖表的命令在這里。這些測試數據來自於從 python.org 隨機選取的一些頁面(總共355個)。

解析

lxml:0.6; BeautifulSoup:10.6; html5lib ElementTree:30.2; html5lib minidom:35.2; Genshi:7.3; HTMLParser:2.9; htmlfill:4.5

第一個測試運行這些解析器解析文檔。需要注意的是:lxml 比 HTMLParser快6倍,盡管 HTMLParser
不生成任何文檔對象(lxml在內存中建立了一個文檔樹)。這里也沒有包含 html5lib 所能生成的全部種類的樹,因為每一種花費的時間都差不多。之所以包含了使用 xml.dom.minidom 作為輸出結果的 html5lib 測試結果是為了說明 minidom 有多慢。Genshi確實很快,只是它也是最不穩定的,相比之下,html5lib , lxml 以及 BeautifulSoup 都要健壯的多。html5lib 的好處是,總是能夠正確的解析HTML(至少在理論上如此)。

lxml在解析過程中會釋放 GIL ,但是我覺得應該影響不大。

序列化

lxml:0.3; BeautifulSoup:2.0; html5lib ElementTree:1.9; html5lib minidom:3.8; Genshi:4.4

所有這些庫執行序列化都很快,可是 lxml 又一次遙遙領先。ElementTree 和 minidom 只做XML序列化,但是沒有理由說HTML序列化更快。還有就是,Genshi居然比minidom要慢,實話說任何比minidom要慢的東西都挺讓人震驚的。

內存佔用

lxml:26; BeautifulSoup:82; BeautifulSoup lxml:104; html5lib cElementTree:54; html5lib ElementTree:64; html5lib simpletree:98; html5lib minidom:192; Genshi:64; htmlfill:5.5; HTMLParser:4.4

最後一項測試是內存。我並不是特別確信我做這個測試的方法很科學,但是數據總能說明一些問題。這項測試會解析所有的文檔並把解析出來的DOM樹保存在內存中,利用 ps 命令結果的RSS(resident set size)段來表示進程佔用的內存。計算基準內存佔用之後所有的庫已經被import,所以只有解析HTML和生成文檔對象會導致內存使用量上升。

我才用 HTMLParser 作為基準線,因為它把文檔保存在內存中,只產生一些中間字元串。這些中間字元串最終也不回佔用多少內存,因為內存佔用基本上等同於這些html問價大小之和。

測量過程中有個棘手的問題就是python的內存分配器並不會釋放它請求的內存,所以,如果一個解析器創建了很多中間對象(字元串等等)然後又釋放了它們,進程仍然會持有這些內存。為了檢測是否有這種情況,我試著分配一些新的字元串知道進程佔用的內存增長(檢測已經分配但是沒有被使用的內存),但是實際上沒檢測到什麼,只有 BeautifulSoup 解析器,在序列化到一個 lxml 樹的時候,顯示出使用了額外的內存。

只有在內存測試中,html5lib 使用 cElementTree 來表示文檔對象同使用 ElementTree 能表現出明顯的不同。我倒不是很驚訝,我猜因為我沒有找到一個C語言編寫的序列化工具,我猜使用 cElementTree 構建文檔樹的話,只有在用本地代碼調用它的時候比較快(就像本地的libxml,並且不需要把數據結構傳遞到python中)。

lxml比較節省內存很可能是因為它使用了本地的libxml2的數據結構,並且只有在需要的時候才創建Python對象。

總結

在進行基準測試之前我就知道lxml會比較快,但是我自己也沒料到會這么快。

所以呢,總結一下:lxml太牛逼了[2]。你可以用很多種方式使用它,你可以對一個HTML進行解析,序列化,解析,再序列化,在機器卡機之前你能重復這些操作很多次。很多操作都是通過本地介面實現的,python只做了一層很淺的封裝。例如,如果你做一次XPath查詢,查詢字元串會被編譯為本地代碼,然後遍歷本地的libxml2對象,只在返回查詢結果的時候才會產生一個python對象。 另外,測試中lxml內存佔用比較小使我更有理由相信lxml在高負載的情況下仍然會很可靠。

我覺得,文檔樹相對按字元流解析(不生成樹,只掃描一次文檔並針對特定的標簽做處理)更有優勢。表面看起來按字元流解析更好:你不把整個文檔放在內存里,處理的時間之和文檔大小線性相關。HTMLParser就是這樣一種解析器,遇到各種符號(標簽開始和關閉,變遷中間的文字等等)。Genshi 也是用的這個模型,因為使用了一些更高級的特性(比如 filters
)所以使用起來更自然一些。其實字元流模型本身就不是一種特別自然的處理XML文檔的方式,從某種程度上說,它只是用來處理一些本來就可以當做字元串處理的文檔的一種笨拙的方法(regex可以實現同樣的功能)。只有你需要處理上G的XML文件的時候按字元流解析才有意義(不過lxml和ElementTree針對這種情況都有額外的參數支持)。HTML文件不會有這么大,這些測試也有理由讓我們相信lxml可以很好的處理大的HTML文件,所以一個大文檔也不會導致一個為小文檔優化過的系統崩潰。

Ian Bicking on Sunday, March30th, 2008

[1]. Genshi是EdgewallSoftware的產品,它的其他產品還包括大名鼎鼎的Trac。

[2]. 本文的作者Ian Bicking是lxml.html(lxml的一個模塊)的開發者和維護者(這里修正一下)。

P.S. 譯者記:這里還有一個解析器沒有提到就是python標准庫里的SGMLParser,它也可以產生ElementTree,但是性能很差,本機測試解析600k的html文檔(ddd的單頁html文檔)需要480秒,不推薦應用在性能要求比較高的場合。本文作者也是lxml的作者,對自己的作品大力推薦也是正常的,我實測過lxml性能確實很好。

⑥ Python 數據處理(十八)—— HTML 表格

頂級 read_html() 函數可以接受 HTML 字元串、文件或URL,並將 HTML 表解析為 pandas DataFrames 列表。

注意 :即使 HTML 內容中僅包含一個表, read_html 也會返回 DataFrame 對象的列表

讓我們看幾個例子

讀入 banklist.html 文件的內容,並將其作為字元串傳遞給 read_html

如果願意,您甚至可以傳入 StringIO 的實例

讀取 URL 並匹配包含特定文本的表

指定一個標題行(默認情況下 <th> 或 <td> 位於 <thead> 中的元素用於形成列索引,如果 <thead> 中包含多個行,那麼創建一個多索引)

指定索引列

指定要跳過的行數:

使用列表指定要跳過的行數( range 函數也適用)

指定一個 HTML 屬性

指定應轉換為 NaN 的值

指定是否保持默認的 NaN 值集

可以為列指定轉換器。這對於具有前導零的數字文本數據很有用。

默認情況下,將數字列轉換為數字類型,並且前導零會丟失。為了避免這種情況,我們可以將這些列轉換為字元串

組合上面的選項

讀取 to_html 的輸出(會損失浮點數的精度)

當只提供了一個解析器時,如果解析失敗, lxml 解析器會拋出異常,最好的方式是指定一個解析器列表

但是,如果安裝了 bs4 和 html5lib 並傳入 None 或 ['lxml','bs4'] ,則解析很可能會成功。

DataFrame 對象有一個實例方法 to_html ,它將 DataFrame 的內容呈現為 html 表格。

函數參數與上面描述的方法 to_string 相同。

columns 參數將限制顯示的列

float_format 參數控制浮點值的精度

bold_rows 默認情況下將使行標簽加粗,但你可以關閉它

classes 參數提供了給 HTML 表 設置 CSS 類的能力。

請注意,這些類附加到現有的 dataframe 類之後

render_links 參數提供了向包含 url 的單元格添加超鏈接的能力

最後, escape 參數允許您控制 HTML 結果中是否轉義了 "<" 、 ">" 和 "&" 字元(默認情況下為 True )。

因此,要獲得沒有轉義字元的 HTML ,請傳遞 escape=False

轉義

不轉義

在某些瀏覽器上這兩個 HTML 表可能並不會顯示出差異。

在頂級 pandas io 函數 read_html 中,用於解析 HTML 表的庫存在一些問題

⑦ python 解析html 什麼包好

對html的解析是網頁抓取的基礎,分析抓取的結果找到自己想要的內容或標簽以達到抓取的目的。
HTMLParser是python用來解析html的模塊。它可以分析出html裡面的標簽、數據等等,是一種處理html的簡便途徑。 HTMLParser採用的是一種事件驅動的模式,當HTMLParser找到一個特定的標記時,它會去調用一個用戶定義的函數,以此來通知程序處理。它主要的用戶回調函數的命名都是以handler_開頭的,都是HTMLParser的成員函數。當我們使用時,就從HTMLParser派生出新的類,然後重新定義這幾個以handler_開頭的函數即可。這幾個函數包括:
handle_startendtag 處理開始標簽和結束標簽
handle_starttag 處理開始標簽,比如<xx> tag不區分大小寫

handle_endtag 處理結束標簽,比如</xx>
handle_charref 處理特殊字元串,就是以&#開頭的,一般是內碼表示的字元
handle_entityref 處理一些特殊字元,以&開頭的,比如
handle_data 處理數據,就是<xx>data</xx>中間的那些數據
handle_comment 處理注釋
handle_decl 處理<!開頭的,比如<!DOCTYPE html PUBLIC 「-//W3C//DTD HTML 4.01 Transitional//EN」
handle_pi 處理形如<?instruction>的東西
def handle_starttag(self,tag,attr):
#注意:tag不區分大小寫,此時也可以解析 <A 標簽
# SGMLParser 會在創建attrs 時將屬性名轉化為小寫。

if tag=='a':
for href,link in attr:
if href.lower()=="href":
pass

1. 基本解析,找到開始和結束標簽

[python] view plain
<span style="font-size:18px;">#coding:utf-8

from HTMLParser import HTMLParser
'''''
HTMLParser的成員函數:

handle_startendtag 處理開始標簽和結束標簽
handle_starttag 處理開始標簽,比如<xx>
handle_endtag 處理結束標簽,比如</xx>
handle_charref 處理特殊字元串,就是以&#開頭的,一般是內碼表示的字元
handle_entityref 處理一些特殊字元,以&開頭的,比如
handle_data 處理數據,就是<xx>data</xx>中間的那些數據
handle_comment 處理注釋
handle_decl 處理<!開頭的,比如<!DOCTYPE html PUBLIC 「-//W3C//DTD HTML 4.01 Transitional//EN」
handle_pi 處理形如<?instruction>的東西

'''
class myHtmlParser(HTMLParser):
#處理<!開頭的內容
def handle_decl(self,decl):
print 'Encounter some declaration:'+ decl
def handle_starttag(self,tag,attrs):
print 'Encounter the beginning of a %s tag' % tag
def handle_endtag(self,tag):
print 'Encounter the end of a %s tag' % tag
#處理注釋
def handle_comment(self,comment):
print 'Encounter some comments:' + comment

if __name__=='__main__':
a = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\
<html><head><!--insert javaScript here!--><title>test</title><body><a href="http: //www.163.com">鏈接到163</a></body></html>'
m=myHtmlParser()
m.feed(a)
m.close()

輸出結果:

Encounter some declaration:DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"
Encounter the beginning of a html tag
Encounter the beginning of a head tag
Encounter some comments:insert javaScript here!
Encounter the beginning of a title tag
Encounter the end of a title tag
Encounter the beginning of a body tag
Encounter the beginning of a a tag
Encounter the end of a a tag
Encounter the end of a body tag
Encounter the end of a html tag</span>

⑧ python HTML解析之 - lxml

lxml是處理XML和HTML的python語言,解析的時候,自動處理各種編碼問題。而且它天生支持 XPath 1.0、XSLT 1.0、定製元素類。
安裝:

HTML 實例

test, test.html指上述實例

獲取 a 的所有標簽, 這種html內容有多種寫法,可以 直接得到了4個元素。

按照(2)中的方法,再加上 /@href ,可以直接得到屬性值。

或者得到(2)中的結果,一一輪詢。

更多表達式見 python xpath的學習
參考: https://www.jianshu.com/p/2ae6d51522c3

⑨ Python html 模塊簡介

比如:

比如,數學符號 , ,可以直接獲得:

escape 將特殊字元 & , < 和 > 替換為HTML安全序列。如果可選的 flags quote 為 True (默認值),則還會翻譯引號字元,包括雙引號( " )和單引號( ' )字元。

將字元串 s 中的所有命名和數字字元引用 (例如 > , > , > ) 轉換為相應的 Unicode 字元。此函數使用 HTML 5 標准為有效和無效字元引用定義的規則,以及 HTML 5 命名字元引用列表 。

這個模塊定義了一個 HTMLParser 類,為 HTML(超文本標記語言)和 XHTML 文本文件解析提供基礎。

class html.parser.HTMLParser(*, convert_charrefs=True) 創建一個能解析無效標記的解析器實例。查找標簽(tags)和其他標記(markup)並調用 handler 函數。

用法:

通過調用 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 類,當遇到開始標記、結束標記以及數據的時候將內容列印出來。

輸出:

HTMLParser.reset() 重置實例。丟失所有未處理的數據。在實例化階段被隱式調用。

HTMLParser.feed(data) 填充一些文本到解析器中。如果包含完整的元素,則被處理;如果數據不完整,將被緩沖直到更多的數據被填充,或者 close() 被調用。 data 必須為 str 類型。

HTMLParser.close() 如同後面跟著一個文件結束標記一樣,強制處理所有緩沖數據。這個方法能被派生類重新定義,用於在輸入的末尾定義附加處理,但是重定義的版本應當始終調用基類 HTMLParser 的 close() 方法。

HTMLParser.getpos() 返回當前行號和偏移值。

HTMLParser.get_starttag_text() 返回最近打開的開始標記中的文本。結構化處理時通常應該不需要這個,但在處理「已部署」的 HTML 或是在以最小改變來重新生成輸入時可能會有用處(例如可以保留屬性間的空格等)。

下列方法將在遇到數據或者標記元素的時候被調用。他們需要在子類中重載。基類的實現中沒有任何實際操作(除了 handle_startendtag() ):

HTMLParser.handle_starttag 這個方法在標簽開始的時候被調用(例如: <div id="main"> )。 tag 參數是小寫的標簽名。 attrs 參數是一個 (name, value) 形式的列表,包含了所有在標記的 <> 括弧中找到的屬性。 name 轉換為小寫, value 的引號被去除,字元和實體引用都會被替換。比如,對於標簽 <a href="https://www.cwi.nl/"> ,這個方法將以下列形式被調用 handle_starttag('a', [('href', 'https://www.cwi.nl/')]) 。 html.entities 中的所有實體引用,會被替換為屬性值。

HTMLParser.handle_endtag(tag) 此方法被用來處理元素的結束標記(例如: </div> )。 tag 參數是小寫的標簽名。

HTMLParser.handle_startendtag(tag, attrs) 類似於 handle_starttag() , 只是在解析器遇到 XHTML 樣式的空標記時被調用( <tag ... /> )。這個方法能被需要這種特殊詞法信息的子類重載;默認實現僅簡單調用 handle_starttag() 和 handle_endtag() 。

HTMLParser.handle_data(data) 這個方法被用來處理任意數據(例如:文本節點和 <script>...</script> 以及 <style>...</style> 中的內容)。

HTMLParser.handle_entityref(name) 這個方法被用於處理 &name; 形式的命名字元引用(例如 > ),其中 name 是通用的實體引用(例如: 'gt' )。如果 convert_charrefs 為 True,該方法永遠不會被調用。

HTMLParser.handle_charref(name) 這個方法被用來處理 &#NNN; 和 &#xNNN; 形式的十進制和十六進制字元引用。例如, > 等效的十進制形式為 > ,而十六進制形式為 > ;在這種情況下,方法將收到 '62' 或 'x3E' 。如果 convert_charrefs 為 True ,則該方法永遠不會被調用。

HTMLParser.handle_comment(data) 這個方法在遇到注釋的時候被調用(例如: )。例如, 這個注釋會用 ' comment ' 作為參數調用此方法。

Internet Explorer 條件注釋(condcoms)的內容也被發送到這個方法,因此,對於 ``,這個方法將接收到 '[if IE 9]>IE9-specific content<![endif]' 。

HTMLParser.handle_decl(decl) 這個方法用來處理 HTML doctype 申明(例如 <!DOCTYPE html> )。 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 形參為 <![...]> 標記中的所有內容。某些時候對派生類的重載很有用。基類實現中無任何實際操作。

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

下面介紹如何解析 HTML 文檔。

解析一個文檔類型聲明:

解析一個具有一些屬性和標題的元素:

script 和 style 元素中的內容原樣返回,無需進一步解析:

解析注釋:

解析命名或數字形式的字元引用,並把他們轉換到正確的字元(注意:這 3 種轉義都是 '>' ):

填充不完整的塊給 feed() 執行, handle_data() 可能會多次調用(除非 convert_charrefs 被設置為 True ):

解析無效的 HTML (例如:未引用的屬性)也能正常運行:

⑩ python可以爬取本地html頁面信息嗎

可以的,主要是把URL換成本地HTML頁面的目錄就好了。

熱點內容
安卓jj比賽哪個版本有全記牌器 發布:2025-07-14 08:28:27 瀏覽:72
python腳本執行hive 發布:2025-07-14 08:26:24 瀏覽:488
媒體存儲可以刪除嗎 發布:2025-07-14 08:26:13 瀏覽:812
ios網易雲音樂上傳 發布:2025-07-14 08:16:58 瀏覽:392
榮耀8x可以用方舟編譯器嗎 發布:2025-07-14 08:09:49 瀏覽:277
雲伺服器商家怎麼購買 發布:2025-07-14 08:05:34 瀏覽:45
c語言convert函數 發布:2025-07-14 07:56:34 瀏覽:483
sql存儲過程列印 發布:2025-07-14 07:56:26 瀏覽:658
弄伺服器需要什麼語言 發布:2025-07-14 07:54:27 瀏覽:507
金土火的三才配置是什麼意思 發布:2025-07-14 07:51:21 瀏覽:774