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.

Bucle for con una gran cantidad de URLs diferentes

Totalmente novato en Python, después de muchos videos de YouTube y tutoriales estoy tratando de raspar las alineaciones iniciales de baloncesto de Flashscore.
Aquí tienes un ejemplo de un enlace: https://www.flashscore.it/partita/6PN3pAhq/#informazioni-partita/formazioni

Como puedes ver en el medio hay un código (6PN3pAhq) que corresponde a un partido en particular: cada partido tiene uno diferente, raspeé todos los resultados (144 partidos en este momento) y los almacené en un archivo de Excel… pero ahora estoy buscando la mejor manera de recorrer en bucle estas diferentes URLs para raspar las alineaciones de cada partido (y añadirlas a un único dataframe)…

Aquí está mi código para la URL anterior, cualquier ayuda es muy apreciada!

from selenium import webdriver
from bs4 import BeautifulSoup
from time import sleep
import pandas as pd

URL = "https://www.flashscore.it/partita/6PN3pAhq/#informazioni-partita/formazioni"

driver = webdriver.Chrome(r"C:\chromedriver.exe")
driver.get(URL)

sleep(5)

driver.find_element_by_id('onetrust-accept-btn-handler').click()
soup = BeautifulSoup(driver.page_source, "html.parser")

start = []

id = soup.find(class_="section")

for id2 in id.find_all("a", {"class": "lf_participantName"}):
    start.append(id2.get('href'))

df = pd.DataFrame(start)

print (df)
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para recorrer diferentes URLs y obtener la alineación de cada partido, puedes crear una lista con todas las URLs y luego utilizar un bucle for para iterar a través de cada URL y obtener los datos de alineación.

    Primero, debes modificar tu código existente para envolverlo en una función que tome una URL como argumento y devuelva los datos de la alineación. Luego, crea una lista con todas las URLs que deseas obtener los datos:

    urls = [
      "https://www.flashscore.it/partita/6PN3pAhq/#informazioni-partita/formazioni",
      "https://www.flashscore.it/partita/otro-enlace/#informazioni-partita/formazioni",
      # añade más URLs aquí
    ]
    

    A continuación, crea un DataFrame vacío utilizando pandas fuera del bucle for para guardar los datos de la alineación:

    lineups_df = pd.DataFrame(columns=["nombre_jugador", "nombre_equipo"])
    

    Ahora puedes utilizar un bucle for para iterar a través de cada URL en la lista, llamar a la función para obtener los datos de la alineación y añadirlos al DataFrame:

    for url in urls:
      datos_alineacion = obtener_datos_alineacion(url)
      lineups_df = lineups_df.append(datos_alineacion)
    

    Finalmente, puedes guardar el DataFrame en un archivo único:

    lineups_df.to_csv("todas_alineaciones.csv", index=False)
    

    Al poner todas estas piezas juntas, deberías tener una solución funcional para obtener los datos de la alineación de múltiples URLs y guardarlos en un único DataFrame de pandas.

Comments are closed.