2010-03-12 57 views
8

搜索「python」和「xml」會返回多種用於組合這兩者的庫。哪個XML庫用於什麼目的?

這份名單可能有問題:

  • xml.dom的
  • xml.etree
  • xml.sax
  • xml.parsers.expat
  • 的PyXML
  • beautifulsoup?
  • 的HTMLParser
  • htmllib中
  • sgmllib中

是很好,如果有人能提供的時候使用它,爲什麼一個簡單的總結。

+0

那次我帶着美麗的湯去了,因爲其他人對於輸入的內容都是迂腐的;我無法控制的東西。 – 2010-03-19 05:20:34

+0

從開發人員的生產力和易用性角度來看,我對'BeautifulSoup'有很棒的經驗。 Anaconda python隨身攜帶。 – arun 2017-10-24 13:37:20

回答

7

DOM/SAX鴻溝是基本的。它不僅適用於python,因爲DOM和SAX是跨語言的。

DOM:將整個文檔讀入內存並對其進行處理。 適合:在標記跨越標記

  • 複雜關係
  • 小錯綜複雜的XML文檔
  • 注意事項:
    • 易於使用過多的內存

SAX:解析t他在閱讀時記錄它。適合:

  • 長文檔或開放式流
  • 地方內存是一種約束
  • 注意事項:
    • 你需要編寫一個狀態分析器,它可能會非常棘手

beautifulsoup

非常適合HTML或不太完善的標記。易於使用和快速。適用於屏幕抓取等。它可以與標記一起使用,其中基於XML的標記僅通過標記不正確的錯誤。

其餘大部分我沒有使用過,但我認爲關於何時使用哪些規則沒有硬性規定。只是你的標準考慮:誰來維護代碼,你覺得哪些API最容易使用,工作效率如何等等。

一般來說,對於基本需求,使用標準庫模塊因爲它們是「標準」的,因此可用且衆所周知。但是,如果您需要深入研究某些內容,幾乎總是會有更新的非標準模塊在標準庫之外提供卓越的功能。

+0

使用這兩種樣式的解析器找到了一篇好文章: http://www.doughellmann.com/PyMOTW/xml/etree/ElementTree/parse.html – 2010-03-16 00:07:49

+0

您的鏈接pymotw有很多很好的示例關於標準api。它實際上被稱爲「本週的python模塊」。 – n611x007 2014-04-23 10:07:40

1

我對XML沒有太多的瞭解,但是當我需要的時候,lxml一直是一種樂趣,而且顯然非常快。元素樹API在面向對象的設置中非常好用。

4

我發現xml.etree基本上足夠了一切,除了BeautifulSoup如果我需要(從破碎的HTML,這BeautifulSoup也有助於和無處不不是一個普遍的問題,不同的)解析 XML:它有合理支持讀取內存中的整個XML文檔,瀏覽它們,創建它們,逐步解析大文檔。 lxml支持相同的接口,並且速度通常更快 - 當您可以負擔得起安裝第三方Python擴展時(例如在App Engine上,您不能 - 但xml.etree仍然存在,所以您可以準確運行相同的代碼)。 lxml也有更多的功能,並提供BeautifulSoup。

你提到的其他庫是模仿非常不同的語言設計的API,一般而言,我沒有理由將Python扭曲到這些迴轉中。如果你有非常特殊的需求,例如對xslt的支持,各種驗證等等,那麼可能還有其他庫需要四處尋找,但是我很長一段時間沒有這樣的需求,所以我不是現在的爲他們提供的產品。

1

對於許多問題,你可以通過XML獲得。它具有作爲標準庫一部分的主要優點。這意味着它幾乎安裝在每個系統上,並且界面將是靜態的。這不是最好的,也不是最快的,但它在那裏。

其他的一切都有lxml。具體來說,lxml最適合解析破碎的HTML,xHTML或可疑提要。它使用libxml2和libxslt來處理XPath,XSLT和EXSLT。教程很明確,界面簡單直觀。提到的其餘庫存在,因爲lxml目前的形式不可用。

這是我的意見。