2010-08-09 9 views
2

J'ai besoin d'obtenir toutes les lignes de table sur une page qui contiennent une chaîne spécifique 'abc123123' en eux.Utilisation de beautifulSoup, en essayant d'obtenir toutes les lignes de table qui ont une chaîne

La chaîne est à l'intérieur d'un TD, mais j'ai besoin du TR entier s'il contient le 'abc123123' à l'intérieur.

J'ai essayé ceci:

userrows = s.findAll('tr', contents = re.compile('abc123123')) 

Je ne sais pas si le contenu est la propriété d'écriture.

Mon html ressemble:

<tr> 
    <td> 
    </td> 
    <td><table>.... abc123123 </table><tr> 
    .. 
</tr> 
<tr> 
.. 
</tr> 
.. 
.. 

Répondre

4

Non, les arguments de mots-clés supplémentaires au-delà de ceux spécifiés (name, attrs, recursive, text, limit) se réfèrent tous à attributs de la balise que vous recherchez.

Vous ne pouvez pas rechercher nameettext en même temps (si vous spécifiez text, BS ignore name) si vous avez besoin des appels distincts, par exemple:

allrows = s.findAll('tr') 
userrows = [t for t in allrows if t.findAll(text=re.compile('abc123123'))] 

J'utilise ici une compréhension de la liste puisque je suppose que vous voulez une liste des objets tag pertinents, comme findAll lui-même vous donne.

+0

ou je pourrais juste faire sinon t.findAll (..) continuer merci, en essayant maintenant! – Blankman

+0

ok ça ne marche pas, parce que le texte que je cherche est en fait dans une balise href ... hmm – Blankman

+0

@Blankman, il n'y a pas de balise 'href' en HTML, je suppose que tu veux dire l'attribut href d'un' un tag Dans ce cas, dans la deuxième instruction, utilisez 't.findall ('a', href = re.compile ('abc123123'))', bien sûr. –