Comment obtenir un élément imbriqué dans une belle soupe
-
21-08-2019 - |
Question
J'ai du mal avec la syntaxe requise pour récupérer quelques hrefs dans un td.Les éléments table, tr et td n'ont aucune classe ni identifiant.
Si je voulais prendre l’ancre dans cet exemple, de quoi aurais-je besoin ?
<tr> <td> <A> ...
Merci
La solution
Conformément à la documentation, vous créez d'abord un arbre d'analyse :
import BeautifulSoup
html = "<html><body><tr><td><a href='foo'/></td></tr></body></html>"
soup = BeautifulSoup.BeautifulSoup(html)
puis vous y recherchez, par exemple <a>
balises dont le parent immédiat est un <td>
:
for ana in soup.findAll('a'):
if ana.parent.name == 'td':
print ana["href"]
Autres conseils
Quelque chose comme ça?
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [td.find('a') for td in soup.findAll('td')]
Cela devrait trouver le premier "a" à l'intérieur de chaque "td" dans le code HTML que vous fournissez.Vous pouvez modifier td.find
pour être plus précis ou bien utiliser findAll
si vous avez plusieurs liens à l'intérieur de chaque td.
MISE À JOUR:concernant le commentaire de Daniele, si vous voulez être sûr de ne pas en avoir None
est dans la liste, alors vous pouvez modifier la compréhension de la liste ainsi :
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html)
anchors = [a for a in (td.find('a') for td in soup.findAll('td')) if a]
Ce qui ajoute simplement une vérification pour voir si vous avez un élément réel renvoyé par td.find('a')
.