2010-05-10 9 views
3

Je possède ce tableau html:Comment obtenir ces valeurs avec BeautifulSoup?

<table> 
    <tr> 
     <td class="datax">a</td> 
     <td class="datax">b</td> 
     <td class="datax">c</td> 
     <td class="datax">d</td> 
    </tr> 
    <tr> 
     <td class="datax">e</td> 
     <td class="datax">f</td> 
     <td class="datax">g</td> 
     <td class="datax">h</td> 
    </tr> 
</table> 

Comment obtenir la deuxième et la quatrième valeur de chaque <tr>? Si je fais:

bs.findAll('td', {'class':'datax'}) 

je reçois:

 <td class="datax">a</td> 
     <td class="datax">b</td> 
     <td class="datax">c</td> 
     <td class="datax">d</td> 

     <td class="datax">e</td> 
     <td class="datax">f</td> 
     <td class="datax">g</td> 
     <td class="datax">h</td> 

il est correct! mais je voudrais avoir ce résultat:

 <td class="datax">b</td> 
     <td class="datax">d</td> 

     <td class="datax">f</td> 
     <td class="datax">h</td> 

ainsi, les valeurs que je veux sont ->b - d - f - h

(le deuxième et le quatrième <td> de chaque <tr>)

Est-ce possible avec le module BeautifulSoup?

Merci beaucoup!

Répondre

-2

Je sais en utilisant HTQL, il est simple:

<tr>. <td> 2,4

-

HTQL ne prend en charge COM pensée. Voici un exemple complet en javascript:

< html>
< body>
langage de script JavaScript < =>
        var a = new ActiveXObject ("HtqlCom.HtqlControl");
        a.setUrl ("C: \\ test_table.html");
        a.setQuery ("< tr> < td> 2,4");
        pour (a.moveFirst()! A.isEOF(); a.moveNext()) {
                document.write (a.getValueByIndex (1));
       }
</script>
</body>
</html>

+0

quoi? Pourriez-vous me donner un exemple complet? merci beaucoup! – Damiano

+0

-1: HTQL n'est pas tout à fait compatible Python ... –

5

Cela devrait le faire ~

final_values=[td.string for td in bs.findAll('td', {'class':'datax'})[1::2]] 

(après clarification commentaire) pour votre propre le cas serait:

final_values=[td.b.a.string for td in bs.findAll('td', {'class':'datax'})[1::2]] 
+0

Je pense qu'il y a une erreur. Je reçois [Aucun, Aucun, Aucun .....] – Damiano

+0

>>> [td.string pour td dans soup.findAll ('td', {'class': 'datax'}) [1 :: 2]] [u'b ', u'd', u'f ', u'h'] sauf si bs n'est pas BeautifulSoup (source) cela devrait fonctionner correctement – dagoof

+0

hmmm j'ai vérifié ... td.string is None beacuse la valeur de td est ->AAU (je dois obtenir AAU) – Damiano