2009-06-29 5 views

Répondre

19

Selon la documentation, vous devez d'abord faire un arbre d'analyse syntaxique:

import BeautifulSoup 
html = "<html><body><tr><td><a href='foo'/></td></tr></body></html>" 
soup = BeautifulSoup.BeautifulSoup(html) 

puis vous effectuez une recherche dans, par exemple pour <a> étiquettes dont le parent immédiat est un <td>:

for ana in soup.findAll('a'): 
    if ana.parent.name == 'td': 
    print ana["href"] 
+0

tristement ne fonctionne pas – Greyshack

+3

@Greyshack, fonctionne très bien pour moi (en utilisant la version actuelle bien sûr, 6+ ans après le post-pip d'origine installer beautifulsoup4, et bien sûr le nom du module est maintenant bs4) - imprimer 'foo' , comme demandé. Il est bien sûr impossible de vous offrir une aide basée sur une description aussi vague de votre problème que "doesnt [sic] work"! -) –

19

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 taper td.find pour être plus précis ou utiliser findAll si vous avez plusieurs liens dans chaque td.

MISE À JOUR: re commentaire de Daniele, si vous voulez vous assurer que vous n'avez pas None « s dans la liste, 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] 

qui ajoute fondamentalement juste un vérifier pour voir si vous avez un élément réel retourné par td.find('a').

+0

qui est très intelligent! mais si 'a' n'est pas présent, il inclura un None dans la liste des ancres? comment puis-je remplir la liste des ancres seulement les a 'skypping the Nones? –

+1

Ok, j'ai mis à jour la question pour faire face à la suppression de None de la liste. –

+0

c'est génial! Merci! –

Questions connexes