Comment faire pour obtenir une valeur à partir de la table de td en BeautifulSoup?
J'ai une page avec des tableaux à sa source:
<table width='100%' cellspacing='0' cellpadding='2' class='an'>
<tr>
<td width='35%' align='right'>XXX :</td>
<td><b>20</b></td>
</tr>
<tr><
td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
</table>
<table width='361' cellspacing='0' cellpadding='2' class='an'>
<tr>
<td width='35%' align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XX :</td>
<td><a href='XXX'><b>XXX</b></a></td>
</tr>
<tr>
<td align='right'>PHONE :</td>
<td><b>518878943</b></td>
</tr>
</table>
Je voudrais obtenir à partir de cette page, un numéro de téléphone, à partir de la deuxième tableau:
<td align='right'>PHONE :</td>
<td><b>518878943</b></td>
Cependant, mon code:
page_src="""<table width='100%' cellspacing='0' cellpadding='2' class='an'>
<tr>
<td width='35%' align='right'>XXX :</td>
<td><b>20</b></td>
</tr>
<tr><
td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
</table>
<table width='361' cellspacing='0' cellpadding='2' class='an'>
<tr>
<td width='35%' align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XXX :</td>
<td><b>XXX</b></td>
</tr>
<tr>
<td align='right'>XX :</td>
<td><a href='XXX'><b>XXX</b></a></td>
</tr>
<tr>
<td align='right'>PHONE :</td>
<td><b>518878943</b></td>
</tr>
</table>
"""
soup = BeautifulSoup(page_src, 'html.parser')
divs = soup.findAll("table", {"class": "an"})
for div in divs:
row = ''
rows = [row in div.findAll('tbody').findAll('tr')]
Me donne un tel message d'erreur:
Traceback (most recent call last):
File "test.py", line 198, in <module>
rows = [row in div.findAll('tbody').findAll('tr')]
AttributeError: 'ResultSet' object has no attribute 'findAll'
Comment résoudre ce problème et obtenir le numéro de téléphone à partir de la page? Grâce
EDIT:
En partie résolu. En partie, parce que je pense que ma solution est laid, mais il fonctionne. Peut-être que quelqu'un va venir avec plus joli solution?
tds = []
soup = BeautifulSoup(page_src, 'html.parser')
divs = soup.findAll("table", {"class": "an"})
for div in divs:
rows = div.findAll('tr')
for row in rows :
tds.append(row.findAll('td'))
phone = str(tds[12][1])
phone = phone.replace("<td><b>", "").replace("</b></td>", "").strip()
print phone
Regardez les
Les gars, merci pour l'aide, j'ai utilisé la solution posté par @dstudeba, cheers 🙂
.text
fonction, il est beaucoup plus facile que la chaîne replace
méthode.Les gars, merci pour l'aide, j'ai utilisé la solution posté par @dstudeba, cheers 🙂
OriginalL'auteur yak | 2015-12-07
Vous devez vous connecter pour publier un commentaire.
Trouver le
td
élément contenantPHONE :
, puis obtenir le suivant élément frère. Une seule ligne:OriginalL'auteur alecxe
Vous avez quelques problèmes avec votre code.
Premier problème est qu'il y a pas de
tbody
balises afindiv.findAll('tbody')
retournera rien.Deuxième problème est que
div.findAll('tbody')
serait de retourner un tableau, pas une marque, de sorte que vous ne pouvez pas appelerfindAll('tr')
.Voici ce que vous souhaitez obtenir tous les
tr
balises dans le tableau:Vous pouvez ensuite passer à travers toutes les
tr
balises et appel.text
pour obtenir le texte à l'intérieur de la ligne, et selon ceux qui ont des "TÉLÉPHONE" sont ceux que vous voulez.génère:
OriginalL'auteur dstudeba