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.

Python beautifulsoup y openpyxl

Entonces, estoy tratando de usar BeautifulSoup para extraer datos (un rastreador/web scraper) y estoy tratando de iterar sobre cada etiqueta en el HTML para encontrar los datos que quiero. Mi objetivo es obtener una información específica y ponerla en una hoja de cálculo de Excel con la biblioteca de openpyxl. Aquí está un ejemplo:

<table id="Tabla">
    <tr>
        <th>Info A1</th>
        <th>Info B1</th>
        <th>Info C1</th>
        <th>Info D1</th>
        <th>Info E1</th>
    </tr>
    <tr>
        <th>Info A2</th>
        <th>Info B2</th>
        <th>Info C2</th>
        <th>Info D2</th>
        <th>Info E2</th>
    </tr>
</table>

Básicamente, lo que quiero hacer es comparar todas las “A number” infos en la tabla, y si alguna coincide con la información que tengo, obtendré el resto de las infos que están en la misma fila y las pondré en un archivo de Excel. La tabla real es mucho más grande que esta del ejemplo, y ya he tenido éxito iterando sobre ella, pero no sé cómo identificar la información que quiero y compararla con la información que ya tengo.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para comparar la información del “A number” en la tabla y extraer los datos asociados a través de beautifulsoup y openpyxl, puedes seguir estos pasos:

    1. Analiza el contenido HTML utilizando beautifulsoup para extraer la etiqueta de la tabla y su contenido.
    2. Recorre cada fila (etiqueta tr) en la tabla y extrae los datos en la columna “A number” (etiqueta th) utilizando el método find_all.
    3. Compara los datos extraídos del “A number” con la información deseada que tienes.
    4. Si hay una coincidencia, extrae el resto de la información en la fila y guárdala en una lista o tupla.
    5. Utiliza la biblioteca openpyxl para crear un archivo de Excel o abrir uno existente, selecciona una hoja de trabajo e introduce los datos extraídos en las celdas respectivas.

    Aquí tienes un código de ejemplo para ayudarte a empezar:

    from bs4 import BeautifulSoup
    from openpyxl import Workbook
    
    # Ejemplo de contenido HTML
    html_content = '''
        <table id="Table">
            <tr>
                <th>Info A1</th>
                <th>Info B1</th>
                <th>Info C1</th>
                <th>Info D1</th>
                <th>Info E1</th>
            </tr>
            <tr>
                <th>Info A2</th>
                <th>Info B2</th>
                <th>Info C2</th>
                <th>Info D2</th>
                <th>Info E2</th>
            </tr>
        </table>
    '''
    
    # Información deseada para comparar con la columna "A number"
    desired_info = "Info A1"
    
    # Crea un nuevo libro de trabajo y selecciona la hoja de trabajo activa
    wb = Workbook()
    ws = wb.active
    
    # Analiza el contenido HTML utilizando beautifulsoup
    soup = BeautifulSoup(html_content, 'html.parser')
    table = soup.find('table', {'id': 'Table'})
    
    # Recorre cada fila en la tabla y extrae los datos
    for row in table.find_all('tr'):
        a_num = row.find('th').text  # Extrae la información del "A number"
    
        # Compara la información del "A number" con la información deseada
        if a_num == desired_info:
            # Extrae el resto de la información en la fila y guárdala en una lista o tupla
            row_data = [cell.text for cell in row.find_all('th')]
    
            # Introduce los datos extraídos en las celdas respectivas en la hoja de trabajo
            for i, data in enumerate(row_data):
                ws.cell(row=1, column=i+1, value=data)
    
    # Guarda el libro de trabajo
    wb.save('output.xlsx')
    

    Nota: Esto es solo un ejemplo para mostrar la lógica básica, y es posible que necesites modificarlo según la estructura y el contenido de tu tabla HTML real.

Comments are closed.