2010-05-29 20 views
11

My local airport bloquea vergonzosamente a los usuarios sin IE, y se ve horrible. Quiero escribir un script de Python que obtenga los contenidos de las páginas de Llegada y Salidas cada pocos minutos, y muéstrelos de una manera más legible.BeautifulSoup: Obtenga el contenido de una tabla específica

Mis herramientas de elección son mechanize por copiar el sitio para creer que utilizo IE, y BeautifulSoup por la página de análisis para obtener la tabla de datos de vuelos.

Honestamente, me perdí en la documentación de BeautifulSoup, y no puedo entender cómo conseguir la tabla (cuyo título sé) de todo el documento, y cómo obtener una lista de filas de esa tabla.

¿Alguna idea?

Respuesta

25

Este no es el código específico que necesita, solo una demostración de cómo trabajar con BeautifulSoup. Encuentra la tabla cuya identificación es "Table1" y obtiene todos sus elementos 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') 
+1

Eso es realmente genial, no sabía que podría pasar lambdas para encontrarlo. – goggin13

+0

¡Muy bien! Revisa tu buzón de Facebook, te he enviado un mensaje. –

+0

ideas sobre cómo ir a una tabla específica cuando no hay una identificación o un título para diferenciar ... por ejemplo .. Quiero la tercera tabla con el archivo html ... (no hay otros indicadores). – 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

ideas sobre cómo ir a una tabla específica cuando no hay una identificación o título para diferenciar ... por ejemplo .. Quiero la tercera tabla con en el archivo html ... (no hay otros indicadores). – ihightower

+1

@ihightower: 'soup.find ('table') [2]' obtendría la tercera 'tabla'. (Sin embargo, querría verificar la longitud antes de hacer esto, solo para estar seguro.) – hamstu

-14

Sólo si se preocupan, BeautifulSoup ya no se mantiene, y el mantenedor original, sugiere una transición a LXML. Xpath debería hacer el truco muy bien.

+1

Gracias, esa es una información realmente útil. Comprobaré lxml. –

+5

Esto ya no es cierto. BeautifulSoup 4 es la versión actual, y es más de dos años más joven que esta respuesta. –

+0

Estoy usando BeautifulSoup en este momento, por lo que existe y es completamente funcional. –

Cuestiones relacionadas