Je veux localiser 'td' où le texte est 'xyz' afin de pouvoir trouver d'autres attributs dans la ligne. Je n'ai que «xyz» avec moi et je souhaite obtenir d'autres éléments dans cette ligne.
xyz address phone number
Je peux facilement obtenir «xyz» en utilisant
required = soup.find('a', text = 'xyz') print(required[0].text)
mais je ne parviens pas à localiser 'td' pour pouvoir utiliser find_next_siblings ()
pour obtenir d'autres colonnes.
Résultat attendu:
. . . <tr> <td> <a>xyz</a> </td> <td>address</td> <td>phone number</td> </tr> . . .
4 Réponses :
Remplacez votre code par:
xyz address phone number
O / P:
from bs4 import BeautifulSoup html = '''<tr> <td> <a>xyz</a> </td> <td>address</td> <td>phone number</td> </tr>''' soup = BeautifulSoup(html, 'lxml') required = soup.find('a', text = 'xyz') print(required.text) td = required.parent siblingsArray = td.find_next_siblings() for siblings in siblingsArray: print(siblings.text)
Où parent
est Get balise parent immédiate et find_next_siblings
renvoient la liste de la balise suivante des frères et sœurs.
Si vous avez BeautifulSoup moderne, vous pouvez utiliser le sélecteur CSS : contains
. Puis retournez avec la méthode find_parent ()
.
xyz address phone number
Imprime:
from bs4 import BeautifulSoup s = ''' <tr> <td>Other1</td> <td>Other1</td> <td>Other1</td> </tr> <tr> <td> <a>xyz</a> </td> <td>address</td> <td>phone number</td> </tr>''' soup = BeautifulSoup(s, 'lxml') for td in soup.select_one('a:contains(xyz)').find_parent('tr').select('td'): print(td.text.strip())
Avec bs4 4.7.1, combinez les pseudo-classes de : has
et : contains
pour récupérer la ligne et tds à l'intérieur.
Ce bit cible le bon une balise
si présente par son texte
from bs4 import BeautifulSoup as bs html = ''' <tr> <td> <a>xyz</a> </td> <td>address</td> <td>phone number</td> </tr> ''' soup = bs(html, 'lxml') items = [item.text.strip() for item in soup.select('tr:has(a:contains("xyz")) td')] print(items)
Vous récupérez alors la ligne parente ( tr
) ayant ce a code> tag
tr:has(a:contains("xyz"))
Et enfin, utilisez un combinateur descendant et td
sélecteur de type pour obtenir tous les td
dans cette ligne. Utilisation d'une compréhension de liste pour renvoyer la liste.
a:contains("xyz")
Vous pouvez utiliser xpath. find_elements_by_xpath ().
https://www.softwaretestingmaterial.com/how-to-locate-element-by-xpath-locator/
définir l'ID pour la balise html
@Internship TY utilise le sélénium avec find_elements_by_css_selector: selenium-python.readthedocs.io/locating-elements. html