En una tabla grande, quiero leer las filas 5, 10, 15, 20 ... usando BeautifulSoup. ¿Cómo hago esto? ¿Es findNextSibling y un contador incremental el camino a seguir?Obteniendo el enésimo elemento usando BeautifulSoup
14
A
Respuesta
31
También es posible usar findAll
para obtener todas las filas de una lista y después de eso, utilice la sintaxis rebanada acceder a los elementos que usted necesita:
rows = soup.findAll('tr')[4::5]
1
como una solución general, se puede convertir la tabla a una lista anidada y iterate ...
import BeautifulSoup
def listify(table):
"""Convert an html table to a nested list"""
result = []
rows = table.findAll('tr')
for row in rows:
result.append([])
cols = row.findAll('td')
for col in cols:
strings = [_string.encode('utf8') for _string in col.findAll(text=True)]
text = ''.join(strings)
result[-1].append(text)
return result
if __name__=="__main__":
"""Build a small table with one column and ten rows, then parse into a list"""
htstring = """<table> <tr> <td>foo1</td> </tr> <tr> <td>foo2</td> </tr> <tr> <td>foo3</td> </tr> <tr> <td>foo4</td> </tr> <tr> <td>foo5</td> </tr> <tr> <td>foo6</td> </tr> <tr> <td>foo7</td> </tr> <tr> <td>foo8</td> </tr> <tr> <td>foo9</td> </tr> <tr> <td>foo10</td> </tr></table>"""
soup = BeautifulSoup.BeautifulSoup(htstring)
for idx, ii in enumerate(listify(soup)):
if ((idx+1)%5>0):
continue
print ii
Ejecución que ...
[[email protected] ~]$ python testme.py
['foo5']
['foo10']
[[email protected] ~]$
1
Otra opción, si lo prefiere HTML puro ...
"""Build a small table with one column and ten rows, then parse it into a list"""
htstring = """<table> <tr> <td>foo1</td> </tr> <tr> <td>foo2</td> </tr> <tr> <td>foo3</td> </tr> <tr> <td>foo4</td> </tr> <tr> <td>foo5</td> </tr> <tr> <td>foo6</td> </tr> <tr> <td>foo7</td> </tr> <tr> <td>foo8</td> </tr> <tr> <td>foo9</td> </tr> <tr> <td>foo10</td> </tr></table>"""
result = [html_tr for idx, html_tr in enumerate(soup.findAll('tr')) \
if (idx+1)%5==0]
print result
Ejecución que ...
[[email protected] ~]$ python testme.py
[<tr> <td>foo5</td> </tr>, <tr> <td>foo10</td> </tr>]
[[email protected] ~]$
1
Esto puede hacerse fácilmente con select
en la hermosa sopa si conoce los números de fila a seleccionar . (Nota: Esto es en bs4)
row = 5
while true
element = soup.select('tr:nth-of-type('+ row +')')
if len(element) > 0:
# element is your desired row element, do what you want with it
row += 5
else:
break
Cuestiones relacionadas
- 1. Obteniendo cada enésimo elemento de una secuencia
- 2. Obtenga cada enésimo elemento en el conjunto
- 3. jQuery: Agregar elemento después del enésimo elemento
- 4. Seleccione cada enésimo elemento en jQuery?
- 5. Oracle SQL obteniendo el n-ésimo elemento regexp
- 6. Extraiga cada elemento enésimo de un vector
- 7. Rubí obtener enésimo elemento de enorme gama
- 8. Seleccionar cada enésimo elemento de una matriz
- 9. Obteniendo el valor de un Elemento en Cocoa usando TouchXML
- 10. Uso de patrones para encontrar el enésimo elemento
- 11. JQuery obtener el enésimo elemento de la matriz
- 12. ¿Cómo obtengo el enésimo hijo de un elemento usando los selectores de CSS2?
- 13. ¿Por qué estoy obteniendo "'ResultSet' no tiene ningún atributo 'findAll'" usando BeautifulSoup en Python?
- 14. usando BeautifulSoup para insertar un elemento antes de cerrar el cuerpo
- 15. Obteniendo el elemento seleccionado actualmente en QTreeView
- 16. Obteniendo el div primario del elemento
- 17. ¿Cómo puedo emular ": contiene" usando BeautifulSoup?
- 18. Ocultar todos los elementos que vienen después del enésimo elemento
- 19. Analizando datos usando BeautifulSoup en Python
- 20. Cómo eliminar elemento enésimo de la matriz en mongodb
- 21. PHP: Obtener enésimo elemento de una matriz asociativa
- 22. ¿Cómo se selecciona cada enésimo elemento en una matriz?
- 23. BeautifulSoup: cómo reemplazar el valor en un elemento con una etiqueta de elemento?
- 24. Obteniendo TextArea usando JQuery
- 25. obteniendo el valor seleccionado del menú desplegable .NET usando JQuery
- 26. ¿Calcular el paso de permutación enésimo?
- 27. BeautifulSoup innerhtml?
- 28. Obteniendo el nombre de propiedad completo usando ModelMetadata
- 29. Devuelve el enésimo registro de consulta MySQL
- 30. Hoy es el día del año enésimo
Esto está limpio. Observe que el método find all devuelve una matriz, por lo que es genial. – JasTonAChair