2010-03-12 11 views
8

Wyszukiwanie "python" i "xml" zwraca wiele bibliotek do łączenia dwóch.Która biblioteka XML do jakich celów?

Ta lista prawdopodobnie uszkodzony:

  • xml.dom
  • xml.etree
  • xml.sax
  • xml.parsers.expat
  • PyXML
  • BeautifulSoup?
  • HTMLParser
  • htmllib
  • sgmllib

byłoby miło, gdyby ktoś może zaoferować krótkie podsumowanie kiedy używać co i dlaczego.

+0

Poszedłem z piękną zupę przy tej okazji, ponieważ inni byli pedantyczni o wkładzie; coś, nad czym nie miałem kontroli. –

+0

Z punktu widzenia produktywności programistów i łatwości użycia miałem świetne doświadczenie z 'BeautifulSoup'. Anakonda Python okrętów z nim. – arun

Odpowiedz

7

Przegrody DOM/SAX są podstawowe. Dotyczy to nie tylko pythonów, ponieważ DOM i SAX są wielojęzyczne.

DOM: przeczytaj cały dokument w pamięci i nim manipuluj. biorąc pod uwagę:

  • skomplikowanych relacjach całej znaczników w znacznikach
  • małe skomplikowanych dokumentów XML
  • ostrzeżeniami:
    • Łatwe w użyciu nadmierne pamięci

SAX: analizować t on dokumentuje podczas czytania. Biorąc pod uwagę:

  • długich dokumentów lub otwartych strumieni zakończonych
  • miejsca, gdzie pamięć jest przeszkodą
  • Ostrzeżenia:
    • Musisz zakodować pełnostanowego parser, co może być trudne

beautifulsoup:

Doskonały do ​​HTML lub niezupełnie dobrze napisanych znaczników. Łatwy w użyciu i szybki. Dobre na skrobanie ekranu itp. Może pracować ze znacznikami, w przypadku których te oparte na XML byłyby po prostu błędem mówiącym, że znacznik jest nieprawidłowy.

Większość reszty nie wykorzystałem, ale nie sądzę, że istnieją twarde i szybkie zasady dotyczące tego, kiedy należy z nich korzystać. Tylko standardowe rozważania: kto ma zachować kod, które interfejsy API są najłatwiejsze w obsłudze, jak dobrze działają, itp.

Ogólnie rzecz biorąc, w przypadku podstawowych potrzeb dobrze jest korzystać ze standardowych modułów bibliotecznych ponieważ są one "standardowe", a zatem dostępne i dobrze znane.Jeśli jednak chcesz głęboko zagłębić się w coś, prawie zawsze są nowsze niestandardowe moduły o doskonałej funkcjonalności poza standardową biblioteką.

+0

Przenieś ten dobry artykuł z przykładami dobrych elementów, używając obu stylów analizatorów: http://www.doughellmann.com/PyMOTW/xml/etree/ElementTree/parse.html –

+0

Twój link pymotw ma wiele dobrych przykładów o standardowym api. to tak naprawdę nazywa się "moduł Pythona na tydzień". – n611x007

1

Nie robię zbyt wiele z XML, ale kiedy muszę, lxml było przyjemnością w pracy i jest najwyraźniej dość szybki. API drzewa elementów jest bardzo ładne w ustawieniu obiektowym.

4

znajdę xml.etree zasadniczo wystarcza na wszystko, z wyjątkiem BeautifulSoup jeśli kiedykolwiek trzeba przeanalizować uszkodzony XML (nie powszechnym problemem, w odróżnieniu od złamanego HTML, który BeautifulSoup pomaga również i jest wszędzie): ma rozsądne wsparcie dla czytania całych dokumentów XML w pamięci, nawigowania po nich, tworzenia ich, przyrostowego analizowania dużych dokumentów. lxml obsługuje ten sam interfejs i generalnie jest szybszy - przydatny do zwiększania wydajności, kiedy można pozwolić sobie na instalowanie rozszerzeń Pythona innych producentów (np. Na App Engine nie można - ale xml.etree wciąż tam jest, więc możesz uruchomić dokładnie ten sam kod). lxml ma również więcej funkcji i oferuje także BeautifulSoup.

W innych bibliotekach wymieniane są API naśladujące zaprojektowane dla bardzo różnych języków i generalnie nie widzę powodu, aby przekręcać Pythona w te wiry. Jeśli masz bardzo specyficzne potrzeby, takie jak obsługa xslt, różne rodzaje sprawdzania poprawności itp., Może warto jeszcze rozglądać się za innymi bibliotekami, ale od dawna nie miałem takich potrzeb, więc nie jestem obecny Ofiary dla nich.

1

Dla wielu problemów można uzyskać za pomocą xml. Jego główną zaletą jest bycie częścią standardowej biblioteki. Oznacza to, że jest wstępnie zainstalowany na prawie każdym systemie i że interfejs będzie statyczny. Nie jest najlepszy ani najszybszy, ale jest.

Dla wszystkich pozostałych istnieje lxml. Zwykle lxml jest najlepszy do analizowania uszkodzonych plików HTML, xHTML lub podejrzanych źródeł. Używa bibliotek libxml2 i libxslt do obsługi XPath, XSLT i EXSLT. Samouczek jest przejrzysty, a interfejs jest prostolinijnie prosty. Pozostałe wspomniane biblioteki istnieją, ponieważ lxml nie był dostępny w swojej obecnej formie.

To jest moja opinia.

Powiązane problemy