Le scraping Web est l'une des meilleures méthodes de collecte de données pour collecter des données et créer des ensembles de données personnalisés par-dessus.
Disposer d'ensembles de données de haute qualité est essentiel à l'ère de la prise de décision basée sur les données. Bien qu'il existe de nombreux ensembles de données accessibles au public, vous devrez parfois créer des ensembles de données personnalisés qui répondent à vos besoins spécifiques. Le scraping Web vous permet d'extraire des données de sites Web. Vous pouvez ensuite utiliser ces données pour créer votre jeu de données personnalisé.
Aperçu des méthodes de collecte de données
Il existe différentes méthodes de collecte de données. Ils incluent la saisie manuelle des données, les API, les ensembles de données publics et le scraping Web. Chaque méthode a ses avantages et ses limites.
La saisie manuelle des données prend du temps et est sujette aux erreurs humaines, en particulier pour la collecte de données à grande échelle. Cependant, il est utile pour la collecte de données à petite échelle et lorsque les données ne sont pas disponibles par d'autres moyens.
Les API permettent aux développeurs d'accéder aux données et de les récupérer de manière structurée. Ils fournissent souvent des informations en temps réel ou régulièrement mises à jour. Cependant, l'accès à l'API peut être limité, nécessiter une authentification ou avoir des restrictions d'utilisation.
Les ensembles de données publics couvrent un large éventail de sujets et de domaines. Ils sont pré-collectés et se présentent souvent sous un format structuré, ce qui les rend facilement accessibles. Ils peuvent économiser du temps et des efforts lorsque les données requises s'alignent sur les ensembles de données disponibles. Cependant, ils ne couvrent pas toujours vos besoins spécifiques ou ne sont pas toujours à jour.
Le scraping Web offre un moyen de collecter des données à partir de sites Web qui n'offrent pas d'API ou qui ont un accès limité. Il permet la personnalisation, l'évolutivité et la possibilité de collecter des données à partir de plusieurs sources. Cependant, cela nécessite des compétences en programmation, une connaissance de la structure HTML et le respect des directives légales et éthiques.
Choisir Web Scraping pour la collecte de données
Le scraping Web vous permet d'extraire des informations directement à partir de pages Web, vous donnant accès à un large éventail de sources de données. Cela vous donne également le contrôle sur les données à extraire et sur la façon de les structurer. Cela facilite l'adaptation du processus de grattage à vos besoins spécifiques et l'extraction des informations précises dont vous avez besoin pour votre projet.
Identification de la source de données
La première étape du web scraping consiste à identifier la source de données. Il s'agit du site Web qui contient les données que vous souhaitez récupérer. Lors du choix de la source de données, assurez-vous de respecter les conditions d'utilisation de la source. Cet article utilisera IMDb (Internet Movie Database) comme source de données.
Configuration de votre environnement
Mettre en place un environnement virtuel. Exécutez ensuite la commande suivante pour installer les bibliothèques requises.
demandes d'installation de pip pandas beautifulsoup4
Vous utiliserez le demandes bibliothèque pour effectuer des requêtes HTTP. belle soupe4 pour analyser le contenu HTML et extraire les données des pages Web. Enfin, vous utiliserez pandas pour manipuler et analyser des données.
Le code source complet est disponible dans un Référentiel GitHub.
Rédaction du script de scraping Web
Importez les bibliothèques installées dans votre script pour pouvoir utiliser les fonctions qu'elles fournissent.
importer demandes
depuis bs4 importer BelleSoupe
importer temps
importer pandas comme pd
importer concernant
Le temps et concernant Les modules font partie de la bibliothèque standard Python. Par conséquent, ne nécessitent pas d'installations séparées.
temps ajoutera des retards au processus de grattage tandis que concernant s'occupera de expressions régulières.
Vous serez utilisez Beautiful Soup pour gratter le site Web cible.
Créez une fonction qui enverra une requête HTTP GET à votre URL cible. Il doit ensuite récupérer le contenu de la réponse et créer un BelleSoupe objet du contenu HTML.
définitivementobtenir_soupe(url, paramètres=Aucun, en-têtes=Aucun):
réponse = demandes.get (url, params=params, headers=headers)
soupe = BeautifulSoup (response.content, "html.parseur")
retour soupe
L'étape suivante consiste à extraire des informations du BelleSoupe objet.
Pour extraire les informations dont vous avez besoin pour comprendre la structure de votre site Web cible. Cela implique d'inspecter le code HTML du site Web. Cela vous aidera à identifier les éléments et les attributs qui contiennent les données que vous souhaitez extraire. Pour inspecter votre site Web cible, ouvrez son lien dans un navigateur Web et accédez à la page Web contenant les données que vous souhaitez récupérer.
Faites ensuite un clic droit sur la page Web et sélectionnez Inspecter depuis le menu contextuel. Cela ouvrira les outils de développement du navigateur.
Dans le code HTML de la page Web, recherchez les éléments contenant les données que vous souhaitez récupérer. Faites attention aux balises HTML, aux classes et aux attributs associés aux données dont vous avez besoin. Vous les utiliserez pour créer des sélecteurs pour extraire les données à l'aide de BeautifulSoup. Dans la capture d'écran ci-dessus, vous pouvez voir que le titre du film est à l'intérieur du lister-élément-en-tête classe. Inspectez chaque fonctionnalité que vous souhaitez extraire.
Créez une fonction qui extraira des informations du BelleSoupe objet. Dans ce cas, la fonction trouve le titre, le classement, la description, le genre, la date de sortie, les réalisateurs et les vedettes du film à l'aide des balises HTML et des attributs de classe appropriés.
définitivementextract_movie_data(film):
titre = film.trouver("h3", classe_="lister-élément-en-tête").trouver("un").texte
classement = film.trouver("div", classe_="notes-imdb-note").strong.text
description = film.trouver("div", classe_="lister-élément-contenu").Trouver tout("p")[1].text.strip()
genre_element = movie.find("portée", classe_="genre")
genre = genre_element.text.strip() si genre_element autreAucun
release_date = movie.find("portée", classe_="lister-item-year text-muted unbold").texte.strip()
director_stars = movie.find("p", classe_="texte en sourdine").Trouver tout("un")
administrateurs = [personne.texte pour personne dans directeur_stars[ :-1]]
étoiles = [personne.texte pour personne dans réalisateur_stars[-1:]]
données_film = {
"Titre": titre,
"Notation": notation,
"Description": description,
"Genre": genre,
"Date de sortie": date de sortie,
"Directeurs": réalisateurs,
"Étoiles": étoiles
}
retour movie_data
Enfin, créez une fonction qui effectuera le grattage à l'aide des deux fonctions ci-dessus. Il faudra compter l'année et le nombre maximum de films que vous souhaitez scraper.
définitivementscrape_imdb_movies(année, limite):
base_url = " https://www.imdb.com/search/title"
en-têtes = {"Accepter-Langue": "en-US, en; q=0.9"}
films = []
commencer = 1
alors que len (films) < limite :
paramètres = {
"date de sortie": année,
"trier": "num_votes, desc",
"commencer": commencer
}
soupe = get_soup (base_url, params=params, headers=headers)
movie_list = soupe.find_all("div", classe_="lister-item mode-avancé")
si len (liste_films) == 0:
casser
pour film dans movie_list :
movie_data = extract_movie_data (film)
films.append (données_film)
si len (films) >= limite :
casser
commencer += 50# IMDb affiche 50 films par page
le sommeil de temps(1) # Ajouter un délai pour éviter de submerger le serveur
retour films
Appelez ensuite le def scrape_imdb_movies faire le grattage.
# Scrape 1000 films sortis en 2023 (ou autant que disponibles)
films = scrape_imdb_movies(2023, 1000)
Vous avez maintenant récupéré des données.
L'étape suivante consiste à créer un jeu de données à partir de ces données.
Créer un jeu de données à partir des données récupérées
Créer un DataFrame à l'aide de Pandas à partir des données grattées.
df = pd. DataFrame (films)
Ensuite, effectuez le prétraitement et le nettoyage des données. Dans ce cas, supprimez les lignes avec des valeurs manquantes. Ensuite, extrayez l'année de la date de sortie et convertissez-la en numérique. Supprimez les colonnes inutiles. Convertir le Notation colonne en numérique. Enfin, supprimez les caractères non alphabétiques du Titre colonne.
df = df.dropna()
df['Année de sortie'] = df['Date de sortie'].str.extrait(r'(\d{4})')
df['Année de sortie'] = pd.to_numeric (df['Année de sortie'],
erreurs='contraindre').astype('Int64')
df = df. drop(['Date de sortie'], axe=1)
df['Notation'] = pd.to_numeric (df['Notation'], erreurs='contraindre')
df['Titre'] = df['Titre'].appliquer(lambda x: re.sub(r'\W+', ' ', X))
Stockez les données dans un fichier pour les utiliser ultérieurement dans votre projet.
df.to_csv("imdb_movies_dataset.csv", indice=FAUX)
Enfin, imprimez les cinq premières lignes de votre ensemble de données pour avoir une vue d'ensemble.
df.head()
La sortie est comme indiqué dans la capture d'écran ci-dessous :
Vous disposez maintenant d'un jeu de données obtenu via le web scraping.
Web Scraping à l'aide d'autres bibliothèques Python
Beautiful Soup n'est pas la seule bibliothèque Python que vous pouvez utiliser pour le scraping Web. Il existe d'autres bibliothèques. Chacun avec ses avantages et ses limites. Recherchez-les pour savoir lequel convient le mieux à votre cas d'utilisation.