Comment scraper les annonces de BMW sur lacentrale.fr avec Python 3 et Requests

Arrêtez de copier le net. Scrapez le.

 

Comment scraper les annonces de BMW sur lacentrale.fr avec Python 3 et Requests

scraping-la-centrale-fr-python-2021-04-15-lobstr

Qui n’a jamais rêvé d’un beau cylindré allemand, avec ses 4 roues motrices, ses chevaux par millier… et son esthétique saillante? Pour réaliser cette acquisition de classe, rien de mieux que le site de revente lacentrale.fr: des voitures de particulier à particulier, avec des prix attractifs.

lacentrale-python-scraping-

Dans ce tutoriel tout motorisé, nous allons récolter l’ensemble de ces données concernant les véhicules sur lacentrale.fr, en utilisant Python 3 (forcément), et la librairie Requests.

Quelles données allons-nous extraire?

L’objectif est d’extraire l’ensemble des données, a priori dignes d’intérêt, pour qui souhaite acheter ce type de véhicule haut de gamme, soit 5 attributs pour chaque véhicule:

  • « year »: l’année de mise en ligne du véhicule
  • « model »: le modèle du véhicule
  • « version »: la version du véhicule
  • « mileage »: le nombre de kilomètres
  • « price »: le prix du véhicule

On se rend d’abord sur l’URL de lacentrale.fr, on sélectionne BMW, et voilà nos données:

Comment imiter avec Python3 et Requests la requête envoyée vers lacentrale.fr ?

Pour se faire, on va d’abord ouvrir la machine préférée de tout développeur: la console.

Rien de plus simple: clic droit > inspecter. Et ici, on va choisir la partie Network, pour observer les requêtes échangées entre notre navigateur web, et lacentrale.fr.

Ensuite, en utilisant l’outil Search, on va chercher, parmi nos requêtes, un élément de la page, afin d’identifier la requête associée. Par exemple, 31 000 €, le prix de l’engin.

Et voilà notre requête! Il s’agit d’une simple requête GET qui va nous renvoyer le contenu de la page, avec 2 attributes dynamiques:

  • « page »: le numéro de la page
  • « brand »: le nom de la marque

En faisant, clic droit, puis copy as CURL, on va aller récupérer :

Il suffit maintenant de convertir cette requête en Python, avec ce petit outil des plus pratiques, https://curl.trillworks.com/ et voilà notre code Python!

Il suffit maintenant tout simplement de faire varier le numéro de la page et le tour est joué.

Comment récupérer les infos présentes sur la page?

Ici, on va également, ouvrir la console, puis Inspecter les éléments, afin d’obtenir le bon xpath

On peut synthétiser les xpath de nos éléments dans le fichier selectorlib suivant, qu’on appelera cars_results.yml

Le code

Le code est par ailleurs disponible ici: https://gist.github.com/lobstrio/e249d0bae8574fd29e3e8e5194b11f64

J’fais un petit tour dans la ville, dans mon bolide allemand

Le script va donc réaliser les tâches suivantes:

  • se lancer sur la page des résultats de BMWs
  • récupérer les données de voitures

Pour exécuter le script, ouvrez votre éditeur Sublime Text 3, copier-coller le code ci contre, et enregistrez le sous le nom de lacentrale_20210415.py

Dans votre commande, placez ensuite la ligne suivante :

Vous pourrez ensuite observer directement depuis votre console, le résultat suivant :

En itérant sur 10 pages, on va récupérer la bagatelle de 160 véhicules, directement accessibles sur le fichier csv, proprement ordonné:

Limitations connues

Le script permet de récolter les 160 premières BMW sur lacentrale.fr, avec un set de données vaste et directement exploitable. Toutefois, impossible avec cet outil d’extraire les milliers de voitures que proposent le site web chaque jour. 

Passé un premier volume d’extraction, le site est réputé pour renvoyer de fausses informations.

Si vous avez besoin d’aide pour scraper des milliers de données de façon récurrente et à grande échelle, ou si ces sets de données vous intéressent afin de mener à bien vos recherches, vous pouvez nous contacter juste là :

Avertissement: Tout code fourni dans nos tutoriels est destiné à des fins d’illustration et d’apprentissage uniquement. Nous ne sommes pas responsables de la façon dont il est utilisé et n’assumons aucune responsabilité pour toute utilisation préjudiciable du code source. La simple présence de ce code sur notre site n’implique pas que nous encourageons le scraping ou l’extraction de données des sites référencés dans le code et le tutoriel qui l’accompagne. Les tutoriels ne font qu’illustrer la technique de programmation des scrapers web pour les sites internet populaires. Nous ne sommes pas obligés de fournir un support pour le code, cependant, si vous ajoutez vos questions dans la section des commentaires, nous pouvons vous y répondre périodiquement.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *