ejemplos python html parsing beautifulsoup

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