Найти все таблицы в html используя BeautifulSoup - PullRequest
7 голосов
/ 20 марта 2012

Я хочу найти все таблицы в html, используя BeautifulSoup. Внутренние таблицы должны быть включены во внешние таблицы.

Я создал некоторый код, который работает и дает ожидаемый результат. Но мне не нравится это решение, потому что оно уничтожает объект «суп».

Вы знаете, как сделать это более элегантно?

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> 

1 Ответ

15 голосов
/ 20 марта 2012

используйте soup.findAll("table") вместо find() и decompose():

tables = soup.findAll("table")

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

вывод:

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

и ничего не будет уничтожено / уничтожено.

...