2008-10-21 10 views
6

He estado tratando de eliminar algunos datos de los archivos HTML. Tengo la lógica codificada para obtener las celdas correctas. Ahora estoy luchando para conseguir el contenido real de la 'célula':¿Cómo se obtiene el texto de una 'celda de datos' HTML utilizando BeautifulSoup

aquí está mi htm tijeretazo

headerRows [0] [10] .Contenido

[<font size="+0"><font face="serif" size="1"><b>Apples Produced</b><font size="3">  
    </font></font></font>] 

Tenga en cuenta que esta es una lista elemento de Python [].

Necesito el valor Apples Producido, pero no puedo conseguirlo.

Cualquier sugerencia sería apreciada

Sugerencias en un buen libro que explica esto sería ganar mi eterno agradecimiento


Gracias por su respuesta. Sin embargo, ¿no hay una respuesta más general? ¿Qué pasa si mi celular no tiene un atributo 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/entender la documentación y su la 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í.

Saludos

Respuesta

3
headerRows[0][10].contents[0].find('b').string 
5

El BeautifulSoup documentation 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 se base en la etiqueta <b> haría utilizar el argumento al findAll, que le permite buscar solo objetos 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' 
0

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 ver el texto dentro de un grupo de elementos en los que no necesariamente confío en la estructura de. 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 
Cuestiones relacionadas