es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Problema al seleccionar una etiqueta en BeautifulSoup.

Tengo una etiqueta como la siguiente que quiero seleccionar con Beautiful Soup

html
<td align="right" class="simcal" valign="top"> Title:<br/></td>

Cuando intento seleccionar esta etiqueta con los siguientes códigos, todo está bien.


Ejemplo 1: my_tag = soup.find( 'td', attrs={"align": "right", "class": "header2", "valign": 'top'}, ) Ejemplo 2: my_tag = soup.find( text=" Title:", attrs={"align": "right", "class": "header2", "valign": 'top'}, ) Pero cuando trato de combinar ambos [Beautiful Soup][1], Beautiful Soup no puede encontrar el elemento que quiero. This will fail my_tag = soup.find( 'td', text=" Title:", attrs={"align": "right", "class": "header2", "valign": 'top'}, )

Entonces, mi pregunta aquí es ¿alguien puede explicarme qué está sucediendo aquí?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que al usar el argumento text en el método find(), Beautiful Soup busca coincidencias exactas del texto proporcionado. En este caso, el argumento text está establecido en “Title:”, lo que significa que Beautiful Soup está buscando una etiqueta que tenga exactamente “Title:” como su contenido de texto. Sin embargo, en el código HTML proporcionado, el contenido de texto de la etiqueta td es “Title:” seguido de un salto de línea (<br>), lo que no es una coincidencia exacta con “Title:”.

    Para seleccionar esta etiqueta usando Beautiful Soup, puede eliminar el argumento text del método find() o utilizar una expresión regular para buscar una etiqueta que contenga el texto “Title:”. Por ejemplo:

    # Opción 1: eliminar el argumento text
    mi_etiqueta = soup.find('td', attrs={"align": "right", "class": "header2", "valign": 'top'})
    
    # Opción 2: utilizar una regex para buscar una etiqueta con el texto "Title:"
    import re
    
    mi_etiqueta = soup.find('td', attrs={"align": "right", "class": "header2", "valign": 'top'}, text=re.compile("Title:"))
    

    Cualquiera de estas opciones debería permitirle seleccionar la etiqueta deseada con Beautiful Soup.

Comments are closed.