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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sgmllib Introduction

發布時間:2025/4/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sgmllib Introduction 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

8.2.?sgmllib.py?介紹

HTML?處理分成三步:將?HTML?分解成它的組成片段,對片段進行加工,接著將片段再重新合成 HTML。第一步是通過?sgmllib.py?來完成的,它是標準?Python?庫的一部分。

理解本章的關鍵是要知道?HTML?不只是文本,更是結構化文本。這種結構來源于開始與結束標記的或多或少分級序列。通常您并不以這種方式處理?HTML?,而是以文本方式?在一個文本編輯中對其進行處理,或以可視的方式?在一個瀏覽器中進行瀏覽或頁面編輯工具中進行編輯。sgmllib.py?表現出了?HTML?的結構

sgmllib.py?包含一個重要的類:SGMLParser。SGMLParser?將?HTML?分解成有用的片段,比如開始標記和結束標記。在它成功地分解出某個數據為一個有用的片段后,它會根據所發現的數據,調用一個自身內部的方法。為了使用這個分析器,您需要子類化?SGMLParser?類,并且覆蓋這些方法。這就是當我說它表示了?HTML?結構?的意思:HTML?的結構決定了方法調用的次序和傳給每個方法的參數。

SGMLParser?將?HTML?分析成 8 類數據,然后對每一類調用單獨的方法:

開始標記 (Start tag)
是開始一個塊的?HTML?標記,像?<html>、<head>、<body>?或?<pre>?等,或是一個獨一的標記,像?<br>?或?<img>?等。當它找到一個開始標記?tagname,SGMLParser?將查找名為?start_tagname?或?do_tagname的方法。例如,當它找到一個?<pre>?標記,它將查找一個?start_pre?或?do_pre?的方法。如果找到了,SGMLParser?會使用這個標記的屬性列表來調用這個方法;否則,它用這個標記的名字和屬性列表來調用?unknown_starttag?方法。
結束標記 (End tag)
是結束一個塊的?HTML?標記,像?</html>、</head>、</body>?或?</pre>?等。當找到一個結束標記時,SGMLParser?將查找名為?end_tagname?的方法。如果找到,SGMLParser?調用這個方法,否則它使用標記的名字來調用?unknown_endtag?。
字符引用 (Character reference)
用字符的十進制或等同的十六進制來表示的轉義字符,像?&#160;。當找到,SGMLParser?使用十進制或等同的十六進制字符文本來調用?handle_charref?。
實體引用 (Entity reference)
HTML?實體,像?&copy;。當找到,SGMLParser?使用?HTML?實體的名字來調用?handle_entityref?。
注釋 (Comment)
HTML?注釋,包括在?<!-- ... -->之間。當找到,SGMLParser?用注釋內容來調用?handle_comment。
處理指令 (Processing instruction)
HTML?處理指令,包括在?<? ... >?之間。當找到,SGMLParser?用處理指令內容來調用?handle_pi。
聲明 (Declaration)
HTML?聲明,如?DOCTYPE,包括在?<! ... >之間。當找到,SGMLParser?用聲明內容來調用?handle_decl。
文本數據 (Text data)
文本塊。不滿足其它 7 種類別的任何東西。當找到,SGMLParser?用文本來調用?handle_data。
Python?2.0 存在一個 bug,即?SGMLParser?完全不能識別聲明 (handle_decl?永遠不會調用),這就意味著?DOCTYPE?被靜靜地忽略掉了。這個錯誤在?Python?2.1 中改正了。

sgmllib.py?所附帶的一個測試套件舉例說明了這一點。您可以運行?sgmllib.py,在命令行下傳入一個?HTML?文件的名字,然后它會在分析標記和其它元素的同時將它們打印出來。它的實現是通過子類化SGMLParser?類,然后定義?unknown_starttag,unknown_endtag,handle_data?和其它方法來實現的。這些方法簡單地打印出它們的參數。

在 Windows 下的?ActivePython?IDE?中,您可以在 “Run script” 對話框中指定命令行參數。用空格將多個參數分開。

例?8.4.?sgmllib.py?的樣例測試

下面是一個片段,來自本書的?HTML?版本的目錄,toc.html。當然,您的存儲路徑可能與我的有所不同。 (如果您還沒有下載本書的?HTML?版本,可以從?http://diveintopython.org/?下載。

c:\python23\lib> type "c:\downloads\diveintopython\html\toc\index.html" <!DOCTYPE htmlPUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Dive Into Python</title><link rel="stylesheet" href="diveintopython.css" type="text/css">... 略 ...

通過?sgmllib.py?的測試套件來運行它,會得到如下的輸出結果:

c:\python23\lib> python sgmllib.py "c:\downloads\diveintopython\html\toc\index.html" data: '\n\n' start tag: <html lang="en" > data: '\n ' start tag: <head> data: '\n ' start tag: <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" > data: '\n \n ' start tag: <title> data: 'Dive Into Python' end tag: </title> data: '\n ' start tag: <link rel="stylesheet" href="diveintopython.css" type="text/css" > data: '\n '... 略 ...

下面是本章其它部分的路標:

  • 子類化?SGMLParser?來創建從?HTML?文檔中抽取感興趣的數據的類。
  • 子類化?SGMLParser?來創建?BaseHTMLProcessor,它覆蓋了所有8個處理方法,然后使用它們從片段中重建原始的?HTML
  • 子類化?BaseHTMLProcessor?來創建?Dialectizer,它增加了一些方法,專門用來處理指定的?HTML?標記,然后覆蓋了?handle_data?方法,提供了用來處理?HTML?標記之間文本塊的框架。
  • 子類化?Dialectizer?來創建定義了文本處理規則的類。這些規則被?Dialectizer.handle_data?使用。
  • 編寫一個測試套件,它可以從?http://diveintopython.org/?處抓取一個真正的 web 頁面,然后處理它。

繼續閱讀本章,您還可以學習到有關?locals、globals?和基于 dictionary 的字符串格式化的內容。

總結

以上是生活随笔為你收集整理的sgmllib Introduction的全部內容,希望文章能夠幫你解決所遇到的問題。

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