December 2010 Archives
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. :)