Bonjour à tous,

Ayant reçu une aide précieuse hier, je reviens vers vous :p.

J'ai quelques difficultés à récupérer les données d'un tableau présent sur une page web avec python. Le but est de récupérer les données du bilan d'une entreprise grâce au site www.société.com, en utilisant beautiful soup. Prenons un exemple avec le code source suivant:
<table id="actif" cellpadding="0" cellspacing="0" width="100%">
<tr>
<th align="left">Date</th>
<th align="right">31-12-2014</th>

<th align="right">31-12-2013</th>
<th align="right">Variation</th>

</tr>
<tr>
<td>Duree</td>
<td align="right">12 mois</td>

<td align="right">12 mois</td>
<td align="right">12 mois</td>

</tr>
<tr>
<td>Devise</td>
<td class="numdisplay" align="right">
EU
</td>

<td class="numdisplay" align="right">
EU
</td>
<td align="right">-</td>

</tr>
<tr>
<td>Actif immobilisé *</td>
<td class="numdisplay" align="right" chiffre="68958100">68958100</td>

<td class="numdisplay" align="right" chiffre="51245000">51245000</td>
<td align="right">34,57 %</td>

</tr>
<tr>
<td>-dont incorporel</td>
<td class="numdisplay" align="right" chiffre="2436000">2436000</td>

<td class="numdisplay" align="right" chiffre="2422000">2422000</td>
<td align="right">0,58 %</td>

</tr>
</table>


J'aimerais obtenir quelque chose du style:
Actif immobilisé * => 68958100
-dont incorporel => 2436000

Pour cela, j'ai essayé plusieurs bout de code mais aucun ne marche comme je veux. Tout d'abord, j'ai essayé celui-ci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
from bs4 import BeautifulSoup
import urllib.request
url='http://www.societe.com/bilan/imprimerie-nationale-352973622201412311.html'
page=urllib.request.urlopen(url)
soup = BeautifulSoup(page.read())   
tables = soup.findAll('table')
for money in tables[0].findAll('tr'):
   tds=money.findAll('td')
   print (tds[0].string, '=>', tds[1].string)
Mais j'obtiens le code d'erreur suivant: IndexError: list index out of range.
J'ai donc tenté de changer mon code pour que cela fonctionne, mais j'obtiens l'ensemble des informations du tableau et non uniquement ce que je veux. Par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
from bs4 import BeautifulSoup
import urllib
url = 'http://www.societe.com/bilan/imprimerie-nationale-352973622201412311.html'
html_file = urllib.request.urlopen(url)
soup = BeautifulSoup(html_file)
tables = soup.findAll('table')
for row in soup('table')[0].findAll('tr'):
    tds = row('td')
    print(tds)
me donne:[<td>Duree</td>, <td align="right">12 mois</td>]
[<td>Devise</td>, <td align="right" class="numdisplay">
EU
</td>]
[<td>Actif immobilisé *</td>, <td align="right" chiffre="0" class="numdisplay">0</td>]
[<td>-dont incorporel</td>, <td align="right" chiffre="0" class="numdisplay">0</td>]
[<td>-dont corporel</td>, <td align="right" chiffre="0" class="numdisplay">0</td>]
[<td>-dont financier</td>, <td align="right" chiffre="0" class="numdisplay">0</td>]
[<td>Actif circulant *</td>, <td align="right" chiffre="38000" class="numdisplay">38000</td>]
[<td>-dont stocks</td>, <td align="right" chiffre="0" class="numdisplay">0</td>]
[<td height="20">-dont créances</td>, <td align="right" chiffre="1000" class="numdisplay">1000</td>]
[<td>-dont disponibilités</td>, <td align="right" chiffre="37000" class="numdisplay">37000</td>]
[<td>Compte de régularisation actif</td>, <td align="right" chiffre="0" class="numdisplay">0</td>]
[<td>Total actif</td>, <td align="right" chiffre="38000" class="numdisplay">38000</td>]

J'ai donc enfin essayer de sélectionner la partie de la cellule que python devrait lire, mais je ne comprends pas bien les associations qu'il fait..:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
from bs4 import BeautifulSoup
import urllib.request
url='http://www.societe.com/bilan/imprimerie-nationale-352973622201412311.html'
page=urllib.request.urlopen(url)
soup = BeautifulSoup(page.read())    
for td in soup.find_all('td'):
    print (td.string, '=>', td.get("chiffre"))
ce qui donne: Duree => None
12 mois => None
12 mois => None
12 mois => None
Devise => None

EU
=> None

EU
=> None
- => None
Actif immobilisé * => None
68958100 => 68958100
51245000 => 51245000
34,57 % => None
-dont incorporel => None
2436000 => 2436000
2422000 => 2422000


Auriez-vous des idées pour remettre tout ça dans le bon ordre et rendre le résultat plus lisible? Je patauge un peu...et je ne suis pas sûre d'être claire malheureusement :$

Merci d'avance et bonne journée à tous.

Juliette