Tue Dec 14 00:20:19 CET 2010

BeautifulSoup

BeautifulSoup est en fait un parseur html. Sa particularité est d'utiliser les mêmes heuristiques que nos navigateurs web pour réussir à obtenir quelque chose de documents pourris où les tags sont pas fermés par exemple. Ça permet donc d'avoir un parser robuste et acceptable pour parser n'importe quelle page web. Comme d'habitude un petit exemple de code ; celui-ci affiche la table des matières de "Erlang Programming" en allant la chercher sur le site d'O'Reilly :

#!/usr/bin/python
# -*- coding: utf-8 -*-

from BeautifulSoup import BeautifulSoup, BeautifulStoneSoup
import re, urllib2

html = urllib2.urlopen('http://oreilly.com/catalog/9780596518189').read()
page = BeautifulSoup(html, convertEntities=BeautifulStoneSoup.HTML_ENTITIES)

titre = page.find('meta', {'name': 'book_title'})['content']
print titre

for chapitre in page.findAll('li', {'class': 'chapter'}):
    titre_raw = chapitre.find('h3').contents[1]
    titre = re.sub(r'\s+', ' ', titre_raw.strip())
    print '- %s' % titre
    for section in chapitre.findAll('li', {'class': 'sect1'}):
        print '  - %s' % section.contents[1].string

Agréable non ? Si c'est pas lisible immédiatement, un petit coup d'oeil sur le code html de la page web, et vous verrez que si, c'est pas mal. Ça permet vraiment de donner le boulot chiant à BeautifulSoup. Pour plus de détails sur la librairie, il suffit d'avoir voir la documentation, formulée de manière un peu inhabituelle mais tout de même efficace.

En plus c'est enterprise ready. :)


Posted by cygal | Permanent link