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.

Raspando con BeautifulSoup – problema con nombres de clase iguales

Estoy intentando, para un proyecto de escuela, extraer datos de la siguiente página web: https://www.coingecko.com/en/coins/bitcoin/historicaldata/usd?startdate=2021-01-01&end_date=2021-09-30. Mi objetivo es obtener listas separadas para las siguientes columnas: cierre, apertura, volumen y fecha. Mi problema es que para las columnas volumen, apertura y cierre, el nombre de la clase (text-center) es el mismo (ejemplo para la primera fila):

<th scope="row" class="font-semibold text-center">2021-09-30</th>
<td class="text-center">
$782,626,384,092
</td>
<td class="text-center">
$30,068,690,312
</td>
<td class="text-center">
$41,588
</td>
<td class="text-center">
N/A
</td>

Intenté resolverlo con el siguiente código, pero no obtuve éxito (para los valores de cierre):

from bs4 import BeautifulSoup
import requests
import pandas as pd

website = 'https://www.coingecko.com/en/coins/bitcoin/historical<em>data/usd?start</em>date=2021-01-01&end_date=2021-09-30#panel'

response = requests.get(website)

soup = BeautifulSoup(response.content, 'html.parser')

results = soup.find('table', {'class':'table-striped'}).find('tbody').find_all('tr')

close = []
volume = []
open = []
date = []

all_tr = soup.find_all('tr')
print('filas:', len(all_tr))

for row in all_tr:
    all_td = row.find_all('td', recursive=False)
    print('columnas:', len(all_td))
    for column in all_td:
        print(column.text)

close.append(all_td[4].text)

Si alguien pudiera ayudarme, estaría muy agradecido.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para extraer los datos del sitio web y obtener listas separadas para cierre, apertura, volumen y fecha, se puede utilizar el siguiente código:

    from bs4 import BeautifulSoup
    import requests
    import pandas as pd
    
    website = 'https://www.coingecko.com/en/coins/bitcoin/historical_data/usd?start_date=2021-01-01&end_date=2021-09-30'
    
    response = requests.get(website)
    
    soup = BeautifulSoup(response.content, 'html.parser')
    
    close = []
    volume = []
    open_values = []
    date = []
    
    # Encuentra la tabla
    table = soup.find('table', {'class':'table-striped'})
    
    # Loop a través de las filas
    for row in table.tbody.find_all('tr'):
    
        # Obtener las columnas
        columns = row.find_all('td')
    
        # Añadir datos a las listas
        date.append(columns[0].text)
        open_values.append(columns[1].text)
        close.append(columns[2].text)
        volume.append(columns[3].text)
    
    # Imprimir las listas
    print(date)
    print(open_values)
    print(close)
    print(volume)
    

    Este código debería funcionar para extraer los datos requeridos. Sin embargo, tenga en cuenta que es buena práctica agregar manejo de errores y otras comprobaciones para asegurarse de que el código sea robusto y capaz de manejar situaciones inesperadas.

Comments are closed.