2012-03-20 26 views
5

Quiero encontrar todas las tablas en html usando BeautifulSoup. Las tablas interiores deben incluirse en las tablas externas.Buscar todas las tablas en html con BeautifulSoup

He creado un código que funciona y da salida esperada. Pero, no me gusta esta solución, porque destruye el objeto 'sopa'.

¿Sabes cómo hacerlo de una manera más elegante?

from BeautifulSoup import BeautifulSoup as bs 

input = '''<html><head><title>title</title></head> 
<body> 
<p>paragraph</p> 
<div><div> 
    <table>table1<table>inner11<table>inner12</table></table></table> 
    <div><table>table2<table>inner2</table></table></div> 
</div></div> 
<table>table3<table>inner3</table></table> 
<table>table4<table>inner4</table></table> 
</html>''' 

soup = bs(input) 
while(True): 
    t=soup.find("table") 
    if t is None: 
     break 
    print str(t) 
    t.decompose() 

Output:  
<table>table1<table>inner11<table>inner12</table></table></table> 
<table>table2<table>inner2</table></table> 
<table>table3<table>inner3</table></table> 
<table>table4<table>inner4</table></table> 

Respuesta

13

uso soup.findAll("table") en lugar de find() y decompose():

tables = soup.findAll("table") 

for table in tables: 
    if table.findParent("table") is None: 
     print str(table) 

de salida:

<table>table1<table>inner11<table>inner12</table></table></table> 
<table>table2<table>inner2</table></table> 
<table>table3<table>inner3</table></table> 
<table>table4<table>inner4</table></table> 

y nada se destruye/destruido.

Cuestiones relacionadas