2012-03-20 28 views
5

Chcę znaleźć wszystkie tabele w html przy użyciu BeautifulSoup. Tabele wewnętrzne powinny być zawarte w tabelach zewnętrznych.Znajdź wszystkie tabele w html przy użyciu BeautifulSoup

Utworzono kod, który działa i daje oczekiwany wynik. Ale nie podoba mi się to rozwiązanie, ponieważ niszczy obiekt "zupy".

Czy wiesz, jak to zrobić w bardziej elegancki sposób?

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> 

Odpowiedz

13

użycie soup.findAll("table") zamiast find() i decompose():

tables = soup.findAll("table") 

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

wyjściowa:

<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> 

i nic nie zostanie zniszczony/zniszczona.

Powiązane problemy