Esto debería ser bastante directo si tienes un trozo de HTML para analizar con BeautifulSoup. La idea general es navegar a su tabla utilizando el método findChildren
, luego puede obtener el valor del texto dentro de la celda con la propiedad string
.
>>> from BeautifulSoup import BeautifulSoup
>>>
>>> html = """
... <html>
... <body>
... <table>
... <th><td>column 1</td><td>column 2</td></th>
... <tr><td>value 1</td><td>value 2</td></tr>
... </table>
... </body>
... </html>
... """
>>>
>>> soup = BeautifulSoup(html)
>>> tables = soup.findChildren('table')
>>>
>>> # This will get the first (and only) table. Your page may have more.
>>> my_table = tables[0]
>>>
>>> # You can find children with multiple tags by passing a list of strings
>>> rows = my_table.findChildren(['th', 'tr'])
>>>
>>> for row in rows:
... cells = row.findChildren('td')
... for cell in cells:
... value = cell.string
... print "The value in this cell is %s" % value
...
The value in this cell is column 1
The value in this cell is column 2
The value in this cell is value 1
The value in this cell is value 2
>>>
Ese fue el truco! El código funcionó y debería poder modificarlo según sea necesario. Muchas gracias. Una última pregunta. Puedo seguir el código excepto cuando busca en la tabla niños th y tr. ¿Es eso simplemente buscar en mi tabla y devolver tanto el encabezado de la tabla como las filas de la tabla? Si solo quisiera las filas de la tabla, ¿podría simplemente buscar tr solo? muchas gracias de nuevo! – Btibert3
Sí, '.findChildren (['th', 'tr'])' está buscando elementos con tipo de etiqueta de 'th' o' tr'. Si solo quieres encontrar elementos 'tr' deberías usar' .findChildren ('tr') '(nótese una lista, solo la cadena) –
También vale la pena tener en cuenta que [PyQuery] (https://pythonhosted.org /pyquery/api.html) es una muy buena alternativa a BeautifulSoup. –