Pregunta

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 el contenido real de la 'celda':

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 Manzanas producidas pero no puedo acceder a él.

Cualquier sugerencia sería apreciada

Sugerencias sobre un buen libro que explica que esto me ganaría 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 a partir de ellas que lo que he podido hacer desde la documentación de BeautifulSoup. Aprendí a programar en la era de Fortran y mientras disfruto aprendiendo Python y estoy asombrado de su poder, BeautifulSoup es un ejemplo. hacer un cohernet con toda la documentación es difícil para mí.

Saludos

¿Fue útil?

Solución

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

Otros consejos

La la documentación de BeautifulSoup debe cubrir todo lo que necesita, en este caso, parece que quieres usar findNext:

headerRows[0][10].findNext('b').string

Una solución más genérica que no se basa en la etiqueta <b> sería utilizar argumento de texto a findAll, que le permite buscar solo NavigableString objetos:

>>> 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'

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 llegar al texto dentro de un grupo de elementos en los que no quiero confiar necesariamente en la estructura. 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top