Parsear HTML con BeautifulSoup 2007-02-28

Voy a poner un ejemplo de uso de BeautifulSoup, un módulo para Python con el que podemos parsear HTML.

Lo primero que tenemos que hacer es descargar la librería desde aquí. Una vez instalado vamos a ver un sencillo ejemplo:

  1. from BeautifulSoup import BeautifulSoup  
  2.   
  3. html = '''''<html> 
  4.   <head><title>Titulo de la pagina</title></head> 
  5.   <body> 
  6.   <div id="cabecera"><h1>Cabecera</h1></div> 
  7.   <div id="contenido"> 
  8.     Vamos a poner una lista. 
  9.  
  10.     Lista: 
  11.     <ul id="lista1"> 
  12.       <li>Elemento 1</li> 
  13.       <li>Elemento 2</li> 
  14.       <li>Elemento 3</li> 
  15.       <li>Elemento 4</li> 
  16.     </ul> 
  17.      
  18.   </div> 
  19.   </body> 
  20.   </html>'''  
  21.   
  22. soup = BeautifulSoup(html)  
  23.   
  24. # Mostramos el titulo de la pagina  
  25. print soup.head.title.string  
  26.   
  27. # Mostramos la cabecera  
  28. print soup.find("div",{"id":"cabecera"}).contents  
  29.   
  30. # Mostramos el contenido  
  31. contenido = soup.find("div",{"id":"contenido"})  
  32. print contenido.contents  
  33.   
  34. # Ahora mostramos todos los elementos de lista1  
  35. lista = contenido.find("ul",{"id":"lista1"})  
  36. for x in lista:  
  37.     print x.string  
  38. </pre>  
  39.   
  40. Si en lugar de pasar una cadena con el código html quisieramos leer de una url lo podríamos hacer así:  
  41.   
  42. <pre name="code" class="python">  
  43. ...  
  44. import urllib2  
  45.   
  46. sock = urllib2.urlopen("http://servidor/documento.html")  
  47. soup = BeautifulSoup(sock.read())  
  48. ...  

Esto es un ejemplo muy sencillo de lo que se puede hacer, para más detalles leer la documentación.