html5lib
『壹』 html5 在線富文本編輯器怎麼用
如果那個文本編輯器有源代碼模式就可以用,不然沒法用
『貳』 html5版本號為啥都是99999
最新的網頁腳本語言,你上網得到的網頁界面都是用html描述的,你在網頁上點擊右鍵打開查看源碼,看到的就是HTML語言,你從網站接到的就是這種東西,由瀏覽器翻譯成頁面。。。。
HTML5 是html的最新版本,功能更加強大,他是希望完成網頁上所有的功能,比如直接支持繪圖等多媒體相關的,不需要依賴falsh這些附加組件就實現了。。。。,所以用HTML5 可以直接編寫游戲,不需要依賴flash這些東西(性能好不好是另一回事,但可以這么做),不過前提是你的瀏覽器必須支持HTML5腳本才行。。。
『叄』 HTML5是什麼具體是幹嘛的
HTML是超文本標記語言。
所謂的超文本就是只頁面中,你所能聽到的、看到的、點擊的一切東西。
比如,文字,圖片,視頻,聲音,flash動畫等等。
你用瀏覽器,比如IE,chrome,打開任何頁面,右擊頁面空白處,有個「查看源文件」。
點開後,就可以看到密密麻麻的代碼,很多都是<a></a> 、<div></div>之類的東西。這些就是標記。
每個頁面都是由這些標記把頁面內容組裝起來的,一個一個拼成了頁面。
至於HTML5,則是HTML的第五個版本。你可以這么理解。
不曉得這么說你能明白不?
『肆』 python 怎樣獲取 優酷的 HTML5 內容
from bs4 import BeautifulSoup
html = """
<cite class="CitationContent" id="CR1">
Anderson, C. (2008). The end of theory: The data deluge makes the scientific method obsolete.
<em class="EmphasisTypeItalic">Wired,</em>
<em class="EmphasisTypeItalic">16</em>, 07.
</cite>
soup = BeautifulSoup(html, 'html5lib')
print soup.find('cite').get_text()
『伍』 為什麼用C-free5會生成LIB文件而不是EXE文件
是不是把main函數名打錯了?
『陸』 如何使用Python模塊 html5lib
打開 IDLE,將會顯示一個空白的界面.
在頂行輸入以下代碼以導入 "html5lib" 模塊:
import html5lib
from html5lib import treebuilders, treewalkers, serializer
import urllib2
創建一個新的 HTML 5 parser, 用來讀取一個 HTML website. 輸入以下代碼聲明一個新的 parser:
parser = html5lib.HTMLParser()
通過傳遞地址到 urllib2.urlopen 函數來打開一個網站,例如, 如果你要打開 "www.example.com", 輸入以下代碼:
url = urllib2.urlopen("http://www.example.com").read()
傳遞網站到 HTML 5 parser 來接收到一個 tree representation. 保存這個 representation 到一個變數 "tree" 中, 代碼如下:
tree = parser.parse(url)
創建一個 tree walker 如下:
treeWalker = treewalkers.getTreeWalker("dom")
使用這個treewalker遍歷整個 tree.這個 tree walker 將返回一個覆蓋該html5網站的信息流. 遍歷整個tree的代碼如下:
stream = treeWalker(tree)
序列化信息流以便你輸出到console.你可以使用以下2條語句來序列化信息流:
serial = serializer.htmlserializer.HTMLSerializer(omit_optional_tags=False)
output = serial.serialize(stream)
對信息流的序列化輸出遍歷如下:
for element in output:
在上面一句後面縮進下面的語句,並寫上一個列印函數如下:
print(element)
按F5執行程序.腳本將打開並解析一個 HTML 5 網頁. 腳本然後序列化頁面的樹形結構並輸出到console. 輸出可能會因為你選擇的網頁不同而有所變化,可能會類似於下面的東西:
Welcome to a web page!
『柒』 怎麼在python上安裝html5lib
打開 IDLE,將會顯示一個空白的界面.
在頂行輸入以下代碼以導入 "html5lib" 模塊:
import html5lib
from html5lib import treebuilders, treewalkers, serializer
import urllib2
創建一個新的 HTML 5 parser, 用來讀取一個 HTML website. 輸入以下代碼聲明一個新的 parser:
parser = html5lib.HTMLParser()
通過傳遞地址到 urllib2.urlopen 函數來打開一個網站,
『捌』 WEB-INF/lib 這個文件夾在哪
在伺服器里,你把工程布署在哪,就在哪找
如果用工具,一般有個webroot,你在那找到WEB-INF/lib就可以了
『玖』 python3.5安裝html5lib失敗 提示setuptools版本要18.5以上,但是我的setuptools已經是最新版本28.6
建議清除卸載在重新安裝一遍,也有可能是程序安裝錯誤
『拾』 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性能確實很好。