2009-06-29 17 views

risposta

19

Come per i documenti, per prima cosa fare un albero sintattico:

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

e poi si cerca in esso, ad esempio per <a> variabili il cui padre immediato è un <td>:

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

purtroppo non funziona – Greyshack

+3

@Greyshack, funziona bene per me (utilizzando l'attuale versione, ovviamente, 6+ anni dopo l'installazione post-pip originale di beautifulsoup4, e quindi ovviamente il nome del modulo è ora bs4) - stampa 'foo' , come richiesto. Ovviamente è impossibile offrirti un aiuto basato su una descrizione del tuo problema tanto vaga quanto "doesnt [sic] work"! -) –

19

qualcosa di simile?

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(html) 
anchors = [td.find('a') for td in soup.findAll('td')] 

Questo dovrebbe trovare il primo "a" all'interno di ciascun "td" nel codice HTML fornito. È possibile modificare td.find in modo più specifico oppure utilizzare findAll se si dispone di più collegamenti all'interno di ciascun td.

UPDATE: re il commento di Daniele, se si vuole fare in modo di non ha nessun None 's nella lista, allora si potrebbe modificare l'elenco di comprensione così:

from BeautifulSoup import BeautifulSoup 
soup = BeautifulSoup(html) 
anchors = [a for a in (td.find('a') for td in soup.findAll('td')) if a] 

che fondamentalmente solo aggiunge un controlla se hai un elemento reale restituito da td.find('a').

+0

che è molto inteligente! ma se 'a' non è presente, includerebbe una None nell'elenco delle ancore? come posso popolare la lista delle ancore solo l'attuale 'a's skypping the Nones? –

+1

Ok, ho aggiornato la domanda per gestire la rimozione di Nessuno dall'elenco. –

+0

è fantastico! Grazie! –

Problemi correlati