Je récupère des données à partir d'une liste de centaines d'URL, chacune contenant une table contenant des données statistiques de baseball. Au sein de chaque URL unique dans la liste, il y a une table pour toutes les saisons d'une seule carrière de joueur de baseball, comme ceci:Récupération de données de table à partir d'une liste d'URL (contenant chacune une table unique) dans le but de l'ajouter à une seule liste/base de données?
https://www.baseball-reference.com/players/k/killeha01.shtml
J'ai réussi à créer un script pour ajouter les données à partir un seul URL dans une seule liste/base de données. Cependant, voici ma question:
Comment dois-je ajuster mon code pour gratter une liste complète des centaines d'URL de ce domaine, puis ajoutez toutes les lignes de table de toutes les URL en une seule liste/dataframe ?
Mon format général pour gratter une seule URL est la suivante:
import pandas as pd
from urllib.request import urlopen
from bs4 import BeautifulSoup
url_baseball_players = ['https://www.baseball-reference.com/players/k/killeha01.shtml']
def scrape_baseball_data(url_parameter):
html = urlopen(url_parameter)
# create the BeautifulSoup object
soup = BeautifulSoup(html, "lxml")
column_headers = [SCRAPING COMMAND WITH CSS SELECTOR GADGET FOR GETTING COLUMN HEADERS]
table_rows = soup.select(SCRAPING COMMAND WITH CSS SELECTOR GADGET FOR GETTING ALL OF THE DATA FROM THE TABLES INCLUDING HTML CHARACTERS)
player_data = []
for row in table_rows:
player_list = [COMMANDS FOR SCRAPING HTML DATA FROM THE TABLES INTO AN ORGANIZED LIST]
if not player_list:
continue
player_data.append(player_list)
return player_data
list_baseball_player_data = scrape_baseball_data(url_baseball_players)
df_baseball_player_data = pd.DataFrame(list_baseball_player_data)
Ceci est une telle solution élégante. Je pensais vraiment que je devais changer le code dans la fonction et ne réalisais même pas qu'il était possible de faire une boucle for dans l'appel de la fonction. Merci! – TJE