Comment puis-je obtenir le premier et le troisième td à partir d'une table avec BeautifulSoup?

Je suis actuellement en utilisant Python et BeautifulSoup pour gratter quelques données du site web.
Je suis en train de tirer des cellules d'un tableau qui est formaté comme suit:

<tr><td>1<td><td>20<td>5%</td></td></td></td></tr>

Le problème avec le HTML ci-dessus est que BeautifulSoup lit comme une balise. J'ai besoin de tirer sur les valeurs à partir de la première <td> et la troisième <td>, qui serait de 1 et 20, respectivement.

Malheureusement, je n'ai aucune idée de comment aller à ce sujet. Comment puis-je obtenir BeautifulSoup de lire le 1er et le 3ème <td> les balises de chaque ligne de la table?

Mise à jour:

J'ai compris le problème. J'ai été en utilisant html.parser au lieu de la valeur par défaut pour BeautifulSoup. Une fois que je suis passé à l'défaut, les problèmes ont disparu. Aussi, j'ai utilisé la méthode décrite dans la réponse.

J'ai aussi découvert que les différents analyseurs sont très capricieux avec code cassé. Par exemple, la valeur par défaut de l'analyseur refusé de lire au-delà de la ligne 192, mais html5lib fait le travail.Donc essayez d'utiliser lxml, html, et aussi html5lib si vous rencontrez des problèmes à l'analyse de l'ensemble de la table.

OriginalL'auteur Alex Ketay | 2013-08-14