pythonhtml文件
A. 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; 和 NNN; 形式的十進制和十六進制字元引用。例如, > 等效的十進制形式為 > ,而十六進制形式為 > ;在這種情況下,方法將收到 '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 (例如:未引用的屬性)也能正常運行:
B. python怎麼解析html文檔
Python提供了一個HTMLParser模塊,可以非常簡單的解析HTML
首先考慮如何從如下的HTML中提取信息
<!--basic.html>
<HTML>
<HEAD>
<TITLE>DocTitle&Intro</TITLE>
</HEAD>
<BODY>
Thisismytext.
</BODY>
</HTML>
首先定義一個TitleParser類,是標准HTMLParser類的子孫
HTMLParser的feed()方法會調用handle_starttag(),handle_data(),handle_endtag()方法
#!/usr/bin/envpython
#coding=utf-8importsys
classTitleParser(HTMLParser):
def__init__(self):
self.title=''
self.readingtitle=0
HTMLParser.__init__(self)
defhandle_starttag(self,tag,attrs):
iftag=='title':
self.readingtitle=1
defhandle_data(self,data):
ifself.readingtitle:
self.title+=data
defhandle_endtag(self,tag):
iftag=='title':
self.readingtitle=0
defhandle_entityref(self,name):
ifentitydefs.has_key(name):
self.handle_data(entitydefs[name])
else:
self.handle_data('&'+name+';')
defgettitle(self):
returnself.title
fd=open(sys.argv[1])
tp=TitleParser()
tp.feed(fd.read())
print"Titleis:",tp.gettitle()
C. python哪個插件可以小窗口運行html文件
python的pywebview可以小窗口運行html文件。根據查詢相關資料信息,python是圍繞webview組件的輕型跨平台包裝器,它允許在其自己的本機GUI窗口中顯示HTML內容。
D. 怎樣用Python寫一個Html的簡單網頁
1、打開sublime text 3,新建一個PY文件。
E. python怎樣返回靜態html文件,不需要渲染
from flask import Flask,send_file
app = Flask(__name__)@app.route('/')def index():
return send_file("index.html")if __name__ == '__main__':
app.run()
這樣可以返回 html 的內容,但是奇怪的是 css,js 和圖片資源無法載入,而且靜態資源路徑肯定沒有放錯
index.html里的靜態資源的地址不能簡單地寫成在文件系統中相對於index.html的相對地址,而要根據flask的設置寫,
或者直接寫成"exmaple.com/static/xxx.css"的絕對url
F. html文件怎麼打開 python
用Python的requests庫解決這個問題比較簡單,常式如下:
import sys
import requests
reload(sys)
sys.setdefaultencoding('utf-8')
r=requests.get('xxx網址')
fh=open('test.html','w')
fh.write(r.text)
fh.close()
說明一下,requests庫不是Python內置的,不過很流行,很多發行版都帶,沒帶的話就去requests官網去下載,或者用 pip install requests命令安裝最新版。
G. 請問如何用python打開一個html文件
importwx.html2
classBrower(wx.Frame):
def__init__(self):
wx.Frame.__init__(self,None,-1,"BROWER",size=(-1,-1))
self.browser=wx.html2.WebView.New(self,style=0,size=(-1,-1))
self.html_file="test.html"
self.browser.LoadURL(os.path.realpath("test.html"))
H. Python寫靜態HTML
因為近期工作需要,常常要將測試結果/數據統計、匯總和展示,因此會有寫靜態HTML的需求,本文記錄下python寫靜態HTML的小技巧
靈感時來源於unittest測試框架最常用的報告插件: HTMLTestRunner ,該插件本身基於python2且已經更新了,好在 @蟲師 一直在維護和更新這個插件,使得它能繼續被大家所使用,了解詳情請移步: SeldomQA/HTMLTestRunner
回到HTMLTestRunner報告插件,閱讀源碼發現,作者只用了一個python文件便巧妙的將寫HTML、頁面繪制和數據嵌入搞定了。進一步分析可以看到,作者先是在Template基類中定義了測試報告的HTML結構模板和各個模塊/表格模板,然後再以格式化輸入的形式給每一個模板中填充目標數據,再將填充好的模板以格式化輸入的形式填充到HTML結構模板中,最後再將所有內容寫成一個HTML文件即可。
可以看到,這樣的設計其實優點在於非常小巧和輕量,缺點在於可維護和可移植性差,數據量小還尚可,不太適合大量數據的統計和繪制。
這種設計的關鍵在於建模板,然後 按需 填充數據,最後再寫HTML,通常我的做法是: