2010-05-29 12 views
11

My local airport blocca in modo disastroso gli utenti senza IE e sembra terribile. Voglio scrivere degli script Python per ottenere il contenuto delle pagine Arrival and Departures ogni pochi minuti e mostrarli in modo più leggibile.BeautifulSoup: ottieni il contenuto di una tabella specifica

I miei strumenti preferiti sono mechanize per aver imbrogliato il sito in modo da credere che io utilizzi IE e BeautifulSoup per la pagina di analisi per ottenere la tabella dei dati di volo.

Abbastanza onestamente, mi sono perso nella documentazione di BeautifulSoup e non riesco a capire come ottenere la tabella (il cui titolo lo so) dall'intero documento e come ottenere un elenco di righe da quella tabella.

Qualche idea?

risposta

25

Questo non è il codice specifico necessario, solo una dimostrazione di come lavorare con BeautifulSoup. Trova la tabella chi è id è "Table1" e ottiene tutti i suoi tr elementi.

html = urllib2.urlopen(url).read() 
bs = BeautifulSoup(html) 
table = bs.find(lambda tag: tag.name=='table' and tag.has_attr('id') and tag['id']=="Table1") 
rows = table.findAll(lambda tag: tag.name=='tr') 
+1

Questo è davvero bello, non sapevo che potresti passare lambda per trovarlo. – goggin13

+0

Davvero grandioso! Controlla la tua casella di posta di Facebook, ti ​​ho mandato un messaggio. –

+0

qualsiasi idea su come andare ad una tabella specifica quando non ci sono id o titoli da differenziare ... per esempio .. Voglio che la terza tabella sia nel file html ... (non ci sono altri indicatori). – ihightower

6
soup = BeautifulSoup(HTML) 

# the first argument to find tells it what tag to search for 
# the second you can pass a dict of attr->value pairs to filter 
# results that match the first tag 
table = soup.find("table", {"title":"TheTitle"}) 

rows=list() 
for row in table.findAll("tr"): 
    rows.append(row) 

# now rows contains each tr in the table (as a BeautifulSoup object) 
# and you can search them to pull out the times 
+1

qualsiasi idea su come andare ad una tabella specifica quando non ci sono id o titoli da differenziare ... per esempio .. Voglio la terza tabella con il file html ... (non ci sono altri indicatori). – ihightower

+1

@ihightower: 'soup.find ('table') [2]' otterresti il ​​terzo 'tavolo'. (Dovresti controllare la lunghezza prima di farlo, per sicurezza.) – hamstu

-14

Solo se ti interessa, BeautifulSoup non è più mantenuto, e il manutentore originale suggerisce una transizione verso lxml. Xpath dovrebbe fare il trucco proprio bene.

+1

Grazie, questa è un'informazione davvero utile. Controllerò lxml. –

+5

Questo non è più vero. BeautifulSoup 4 è la versione corrente ed è più di due anni più giovane di questa risposta. –

+0

Attualmente sto usando BeautifulSoup in modo che esista e sia perfettamente funzionante. –

Problemi correlati