Quantcast
Channel: Grey Lee » appengine
Viewing all articles
Browse latest Browse all 3

在 Google App Engine 上解析 HTML

$
0
0

解析 XML/HTML 的 Library 有很多,但大部份都只支援 Well-formed XML,遇到 Mal-formed XML 就無法解析,Standard Library 裡面的都屬於此類。可以接受 Mal-formed XML 的 Library 則有以下這些:

lxml
據說是目前 Python 最好的 XML Parser,但不是純 Python 寫的,不能在 Google App Engine 上使用1有人開 ticket 請 Google 裝,不過優先度並不高。
html5lib
HTML5 標準函式庫,在查詢元素方面除了介接 Beautiful Soup、ElementTree、lxml 等既有 Library 以外,還額外提供了一個新的 simpletree 格式,其目標是提供一個最基本的實作,並沒有擴充的打算,查詢起來費時又費力。
Beautiful Soup
相當老牌的 XML Parser,有自己的一套查詢元素的作法。

所以解決方案有這些:

Beautiful Soup
這是 dependency 最低的作法,Beautiful Soup 自己的查詢方法其實也還不錯用,但由於查詢經常是使用正規表達式描述,當 HTML 格式變動的時候維護成本可能會比較大。
html5lib + ElementTree
此作法的原理是讓 html5lib 將原始 HTML 處理成 Well-formed 格式2,然後再用 ElementTree 來作查詢,ElementTree 查詢的方法非常類似 XPath3,很人性化。
Beautiful Soup + ElementTree + ElementSoup
此作法的原理是讓 BeautifulSoup 將原始 HTML 處理成 Well-formed 格式,然後再用 ElementTree 來作查詢。ElementSoup 則是用來幫忙把 Beautiful Soup 格式轉換為 ElementTree 格式。

目前我是用 Beautiful Soup。最後我決定在本地端 parse 完再丟上去… XD


  1. Google App Engine SDK 1.5.5 以後的版本新增了 Python 2.7 的支援,如果指定使用 Python 2.7 的話,就能使用系統提供的 lxml。 

  2. html5lib 的原理是由它來處理原始資料、製成 DOM、ElementTree 的格式,然後再用 DOM、ElementTree 來查詢,所以解析時間並不會比 Beautiful Soup 快。 

  3. ElementTree 1.3 版以前還不支援對屬性查詢,而 Python 是在 2.7 版才將內建的 ElementTree 更新為 1.3,不過我們可以從 Python SVN 取得最新版的 ElementTree,放到 Google App Engine 上使用,缺點是速度沒有 cElementTree 快。 

The post 在 Google App Engine 上解析 HTML appeared first on Grey Lee.


Viewing all articles
Browse latest Browse all 3

Latest Images

Trending Articles





Latest Images