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.

Mismos valores devueltos al realizar el scraping con BeautifulSoup

Estoy tratando de extraer información sobre acciones ETF de tecnología de https://etfdb.com/etfs/sector/technology/#etfs&sortname=assetsundermanagement&sortorder=desc&page=1 como un proyecto personal.

Lo que estoy intentando hacer es extraer las tablas mostradas en cada una de las páginas, pero parece que siempre devuelve los mismos valores, aunque actualice el número de página en la URL. ¿Hay alguna limitación o algo relacionado con la página web que no estoy teniendo en cuenta? ¿Qué puedo hacer para extraer las tablas de las páginas 1 a 5 del enlace anterior?

El código que estoy intentando utilizar es el siguiente:

“`
import pandas as pd
import requests

def etf<em>table</em>scraper(industria):
# instanciar un dataframe vacío
df = pd.DataFrame()

# recorrer las páginas
for page in range(1, 10):
url = f"https://etfdb.com/etfs/sector/{industria}/#etfs_returns&sort=name=symbol&sort<em>order=asc&page={page}"
r = requests.get(url)
df_list = pd.read_html(r.text)[0] # esto convierte todas las tablas de las páginas web en una lista

# si es la primera página, añadir
if page == 1:
df = df.append(df_list[0].iloc[:-1])

# de lo contrario, comprobar si hay solapamientos
elif df_list.loc[0, 'Symbol'] not in df['Symbol'].unique():
df = df.append(df_list.iloc[:-1])

else:
break

return df
“`

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Es posible que el sitio web esté limitando el número de páginas que se pueden extraer, o puede haber alguna carga de contenido AJAX o dinámica que no se esté teniendo en cuenta en el código.

    Una solución a probar sería usar una biblioteca diferente, como Selenium, para simular un navegador web y cargar cada página hasta que se recojan todos los datos deseados. Otra posible solución sería inspeccionar el tráfico de red en el navegador e identificar si hay llamadas a API que se puedan hacer directamente para obtener los datos.

    También puede ser útil verificar si hay errores o advertencias que se están generando en el código o en el tráfico de red que puedan estar causando el problema.

Comments are closed.