2010-06-11 12 views
1

Quelqu'un peut-il me dire comment je peux obtenir la table dans une page HTML qui a le plus de lignes? J'utilise BeautifulSoup.Obtenir une table avec le nombre maximum de lignes dans une page en utilisant BeautifulSoup

Il y a cependant un petit problème. Parfois, il semble y avoir une table imbriquée dans une autre.

<table> 
    <tr> 
     <td> 
      <table> 
       <tr> 
        <td></td> 
        <td></td> 
        <td></td> 
       </tr> 
       <tr> 
        <td></td> 
        <td></td> 
        <td></td> 
       </tr> 
       <tr> 
        <td></td> 
        <td></td> 
        <td></td> 
       </tr> 
      </table> 
     <td> 
    </tr> 
</table> 

Lorsque le code table.findAll('tr') exécute, il compterait toutes les lignes de l'enfant pour la table et les lignes de la table imbriquée dessous. La table parente a juste une rangée mais la table imbriquée a trois et je considérerais que c'est la plus grande table. Voici le code que j'utilise pour extraire la plus grande table actuellement, mais il ne tient pas compte du scénario susmentionné.

soup = BeautifulSoup(html) 

#Get the largest table 
largest_table = None 
max_rows = 0 
for table in soup.findAll('table'): 
    number_of_rows = len(table.findAll('tr')) 
    if number_of_rows > max_rows: 
     largest_table = table 
     max_rows = number_of_rows 

Je suis vraiment perdu avec ça. Toute aide les gars?

Merci à l'avance

+0

Ne vous avez une classe ou id qui pourraient être utilisés pour distinguer les tables? – systempuntoout

Répondre

3

de NUMBER_OF_ROWS Calculer comme ça:

number_of_rows = len(table.findAll(lambda tag: tag.name == 'tr' and tag.findParent('table') == table))