python - ejemplos - bs4
¿Cómo se obtiene el texto de una ''celda de datos'' HTML usando BeautifulSoup? (3)
Tengo una clase base en la que extiendo todas las clases de Beautiful Soup con un montón de métodos que me ayudan a obtener texto dentro de un grupo de elementos en los que no necesariamente quiero basarme. Uno de esos métodos es el siguiente:
def clean(self, val):
if type(val) is not StringType: val = str(val)
val = re.sub(r''<.*?>'', '''', s) #remove tags
val = re.sub("/s+" , " ", val) #collapse internal whitespace
return val.strip() #remove leading & trailing whitespace
He estado tratando de eliminar algunos datos de los archivos HTML. Tengo la lógica codificada para obtener las celdas correctas. Ahora estoy luchando por obtener los contenidos reales de la ''célula'':
aquí está mi recorte htm
headerRows [0] [10] .contents
[<font size="+0"><font face="serif" size="1"><b>Apples Produced</b><font size="3">
</font></font></font>]
Tenga en cuenta que este es un elemento de la lista de Python [].
Necesito el valor de las manzanas producidas pero no puedo acceder a ellas.
cualquier sugerencia sera apreciada
Las sugerencias sobre un buen libro que explique esto me ganarían mi eterna gratitud
Gracias por esa respuesta. Sin embargo, ¿no hay una respuesta más general? Qué sucede si mi celda no tiene un atributo en negrita
decir que es:
[<font size="+0"><font face="serif" size="1"><I>Apples Produced</I><font size="3">
</font></font></font>]
Manzanas producidas
Estoy tratando de aprender a leer / comprender la documentación y su respuesta ayudará
Realmente aprecio esta ayuda. Lo mejor de estas respuestas es que es mucho más fácil generalizar de ellas y luego he podido hacerlo desde la documentación de BeautifulSoup. Aprendí a programar en la era de Fortran y mientras disfruto aprendiendo python y me divierto con su poder, BeautifulSoup es un ejemplo. hacer una cohernet completa de la documentación es difícil para mí.
Aclamaciones
La documentación de BeautifulSoup debe cubrir todo lo que necesita, en este caso, parece que desea utilizar findNext
:
headerRows[0][10].findNext(''b'').string
Una solución más genérica que no dependa de la etiqueta <b>
sería utilizar el argumento de texto para findAll
, que le permite buscar solo objetos de NavigableString
:
>>> s = BeautifulSoup(u''<p>Test 1 <span>More</span> Test 2</p>'')
>>> u''''.join([s.string for s in s.findAll(text=True)])
u''Test 1 More Test 2''
headerRows[0][10].contents[0].find(''b'').string