BeautifulSoup: ottenere il contenuto di una tabella specifica
-
05-10-2019 - |
Domanda
mio aeroporto locale vergognosamente utenti blocchi senza IE, e sembra terribile. Voglio scrivere uno script Python che otterrebbero i contenuti delle pagine arrivi e partenze ogni pochi minuti, e mostrare loro in maniera più leggibile.
I miei strumenti di scelta sono mechanize per truffare il sito di credere che uso di IE, e BeautifulSoup per l'analisi pagina per ottenere la tabella di voli di dati.
Onestamente, mi sono perso nella documentazione BeautifulSoup, e non riesce a capire come ottenere il tavolo (il cui titolo lo so) da tutto il documento, e come ottenere un elenco di righe da quel tavolo.
Tutte le idee?
Soluzione
Questo non è il codice specifico è necessario, solo una demo di come lavorare con BeautifulSoup. Essa trova la tavola che è id è "Table1" e ottiene tutti i suoi elementi tr.
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')
Altri suggerimenti
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
Solo se ti interessa, BeautifulSoup non è più mantenuto, e il manutentore originale suggerisce una transizione verso lxml. Xpath dovrebbe fare il trucco solo bene.