Comment construire un robot d'exploration du Web en moins de 100 lignes de code
Raluca Penciuc le 13 août 2021
Nous vivons à l'ère du numérique et nous avons accès à une multitude de données. Grâce à ces informations, nous pouvons mieux comprendre comment nous travaillons, jouons, apprenons et vivons. Ne serait-il pas agréable de pouvoir obtenir des informations plus ciblées sur un sujet particulier ?
Dans cet article, nous allons montrer comment utiliser BeautifulSoup et WebScrapingAPI ensemble pour construire nos propres crawlers afin de collecter des données ciblées à partir de sites web.
Un mot d'avertissement : l'extraction de contenu protégé par des droits d'auteur ou d'informations personnelles est illégale dans la plupart des cas. Pour rester en sécurité, il est préférable d'obtenir un consentement explicite avant de scraper un site, en particulier les sites de médias sociaux.
Qu'est-ce qu'un robot d'indexation ?
Il existe de nombreux moteurs de recherche, et nous les utilisons tous. Leurs services sont faciles à utiliser : il suffit de poser une question pour qu'ils recherchent une réponse partout sur le web. Derrière le rideau, c'est le robot Googlebot qui fait le succès du moteur de recherche de Google.
En recherchant sur le web des pages correspondant aux mots-clés saisis, les robots d'indexation aident les moteurs de recherche à cataloguer ces pages et à les renvoyer ultérieurement par le biais de l'indexation. Les moteurs de recherche s'appuient sur les crawlers pour collecter des informations sur les sites web, notamment les URL, les hyperliens, les balises méta et les articles, ainsi que pour examiner le texte HTML.
Grâce à la capacité du robot à suivre ce qu'il a déjà consulté, vous n'avez pas à craindre qu'il reste indéfiniment sur la même page web. L'internet public et la sélection du contenu posent plusieurs problèmes aux robots d'indexation. Chaque jour, les sites web existants publient des dizaines de nouveaux éléments d'information et je ne parle même pas du nombre de nouveaux sites web qui apparaissent chaque jour.
En fin de compte, cela les obligerait à parcourir des millions de pages et à rafraîchir leurs index en permanence. Les systèmes d'analyse du contenu des sites web en dépendent, ils sont donc essentiels.
Les robots sont donc importants, mais pourquoi les mentionner ? Parce que nous allons créer notre propre robot pour nous aider dans le processus d'extraction des données. Ainsi, nous pourrons compter sur lui pour récupérer les URL au lieu de les saisir manuellement dans le scraper. Plus d'automatisation, woo !
Installation
Maintenant que nous avons une connaissance de base des robots d'indexation, vous vous demandez peut-être ce que cela donne en pratique. Eh bien, voyons cela de plus près !
Tout d'abord, nous devons configurer notre environnement de travail. Assurez-vous que votre machine remplit les conditions suivantes :
- python3;
- Un IDE Python. Ce guide utilise Visual Studio Code parce qu'il est léger et ne nécessite pas de configuration supplémentaire. Le code est toujours agnostique à l'IDE, vous pouvez donc choisir n'importe quel IDE avec lequel vous vous sentez à l'aise ;
Enfin, nous avons besoin d'une clé API. Vous pouvez créer un compte WSA gratuit, qui vous donnera droit à 5000 appels API pendant les 14 premiers jours. Une fois inscrit, il vous suffit de vous rendre sur votre tableau de bord, où vous trouverez votre clé API et d'autres ressources utiles.

Développement du crawler
Bien, nous avons les outils, nous sommes donc sur le point de commencer à construire notre crawler. Mais comment allons-nous l'utiliser ? Sa mise en œuvre peut varier en fonction de notre objectif final.
Choisissez un site web et inspectez le code HTML
Pour ce tutoriel, nous avons choisi un site web de commerce électronique qui vend des produits zéro déchet de différentes utilisations. Nous allons parcourir toutes les pages, extraire la liste des produits de chaque page et enfin stocker les données dans un fichier CSV pour chaque page.
Pour ce faire, nous devons d'abord jeter un coup d'œil à la structure de la page et décider de notre stratégie. Cliquez avec le bouton droit de la souris n'importe où sur la page, puis sur "Inspecter l'élément", et la "Console du développeur" s'ouvrira. Vous pouvez voir ici le document HTML du site web, qui contient toutes les données dont nous avons besoin.

Construire le crawler
Ok, maintenant nous pouvons écrire du code !
Commencez par ouvrir une fenêtre de terminal dans votre IDE et exécutez la commande suivante, qui installera BeautifulSoup, une bibliothèque qui nous aidera à extraire les données du HTML :
> pip install beautifulsoup4
Ensuite, créez un dossier nommé "products". Il permettra d'organiser et de stocker les résultats du scraping dans plusieurs fichiers CSV.
Enfin, créez le fichier "crawler.py". C'est ici que nous allons écrire tout notre code et notre logique d'exploration. Lorsque nous avons terminé, nous pouvons exécuter le fichier avec la commande suivante :
> py crawler.py
Pour aller plus loin, importons les bibliothèques dont nous avons besoin et définissons quelques variables globales :
import requests
from bs4 import BeautifulSoup
import csv
BASE_URL = "https://www.shopetee.com"
SECTION = "/collections/all-collections"
FULL_START_URL = BASE_URL + SECTION
ENDPOINT = "https://api.webscrapingapi.com/v1/"
API_KEY = "API_KEY"
Définissons maintenant le point d'entrée de notre crawler :
def crawl(url, nom de fichier) :
page_body = get_page_source(url, nom de fichier)
soup = BeautifulSoup(page_body, 'html.parser')
start_crawling(soup, nom de fichier)
crawl(FULL_START_URL, 'etee-page1.txt')
Nous implémentons la fonction crawl, qui va extraire les documents HTML via notre procédure get_page_source. Ensuite, elle construira l'objet BeautifulSoup qui facilitera notre analyse et appellera la fonction start_crawling, qui commencera à naviguer sur le site web.
def get_page_source(url, filename):
params = {
"api_key": API_KEY,
"url": url,
"render_js": '1'
}
page = requests.request("GET", ENDPOINT, params=params)
soup = BeautifulSoup(page.content, 'html.parser')
body = soup.find('body')
file_source = open(filename, mode='w', encoding='utf-8')
file_source.write(str(body))
file_source.close()
return str(body)
As stated earlier, the get_page_source function will use WebScrapingAPI to get the HTML content of the website and will write in a text file in the <body> section, as it’s the one containing all the information we are interested in.
Prenons maintenant un peu de recul et vérifions comment atteindre nos objectifs. Les produits étant organisés en pages, nous devons accéder à chaque page à plusieurs reprises pour les extraire tous.
Cela signifie que notre robot d'exploration suivra des étapes récursives tant qu'il y aura des pages disponibles. Pour transposer cette logique dans le code, nous devons examiner la manière dont le code HTML décrit ces conditions.
Si vous revenez à la Developer Console, vous pouvez voir que chaque numéro de page est en fait un lien vers une nouvelle page. De plus, étant donné que nous sommes sur la première page et que nous n'en avons pas d'autres avant celle-ci, la flèche gauche est désactivée.

L'algorithme suivant doit donc :
- Accéder à la page ;
- Extraire les données (nous le ferons à l'étape suivante) ;
- Rechercher le conteneur de pagination dans le document HTML ; vérifier si la flèche "Page suivante" est désactivée, arrêter si c'est le cas et, si ce n'est pas le cas, obtenir le nouveau lien et appeler la fonction crawl pour la nouvelle page.
def start_crawling(soup, filename):
extract_products(soup, filename)
pagination = soup.find('ul', {'class': 'pagination-custom'})
next_page = pagination.find_all('li')[-1]
if next_page.has_attr('class'):
if next_page['class'] == ['disabled']:
print("You reached the last page. Stopping the crawler...")
else:
next_page_link = next_page.find('a')['href']
next_page_address = BASE_URL + next_page_link
next_page_index = next_page_link[next_page_link.find('=') + 1]
crawl(next_page_address, f'etee-page{next_page_index}.txt')
Extraire les données et les exporter au format CSV
Enfin, voyons comment nous pouvons extraire les données dont nous avons besoin. Nous jetons à nouveau un coup d'œil au document HTML et nous constatons que nous pouvons accéder à des informations précieuses en examinant les noms de classe.

Nous extrairons le nom du produit, son évaluation, le nombre d'avis et son prix, mais vous pouvez aller aussi loin que vous le souhaitez.
Vous vous souvenez du dossier "products" que nous avons créé précédemment ? Nous allons maintenant créer un fichier CSV pour exporter les données que nous récupérons sur chaque page. Le dossier nous aidera à les organiser ensemble.
def extract_products(soup, filename):
csv_filename = filename.replace('.txt', '.csv')
products_file = open(f'products/{csv_filename}', mode='a', encoding='utf-8', newline='')
products_writer = csv.writer(products_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
products_writer.writerow(['Title', 'Rating', 'Reviews', 'Price on sale'])
products = soup.find_all('div', {'class': 'product-grid-item'})
for product in products:
product_title = product.find('div', {'class': 'item-title'}).getText().strip()
product_rating = product.find('span', {'class': 'jdgm-prev-badge__stars'})['data-score']
product_reviews = product.find('span', {'class': 'jdgm-prev-badge__text'}).getText().strip()
product_price_on_sale = product.find('span', {'class': 'money'}).getText()
products_writer.writerow([product_title, product_rating, product_reviews, product_price_on_sale])
Après avoir exécuté le programme, vous pouvez voir toutes les informations extraites dans les fichiers nouvellement créés.

Réflexions finales
Et c'est à peu près tout ! Nous venons de créer notre propre crawler web en utilisant BeautifulSoup et WebScrapingAPI de Python en moins de 100 lignes de code. Bien sûr, cela peut varier en fonction de la complexité de votre tâche, mais c'est une bonne affaire pour un crawler qui navigue à travers les pages d'un site web.
Pour ce guide, nous avons utilisé la version d'essai gratuite de WebScrapingAPI, avec 5000 appels d'API pour les 14 premiers jours, ce qui est largement suffisant pour construire un crawler puissant.
Il était utile de se concentrer uniquement sur la logique du crawler au lieu de se préoccuper des différents défis rencontrés dans le web scraping. Cela nous a permis d'économiser du temps, de l'énergie et d'autres coûts considérables, comme l'utilisation de nos propres proxys, par exemple, qui ne sont que quelques-uns des avantages que l'on peut obtenir en utilisant une API pour le web scraping.
Nouvelles et mises à jour
Restez au courant des derniers guides et nouvelles sur le web scraping en vous inscrivant à notre lettre d'information.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Articles connexes

Découvrez comment extraire et organiser efficacement des données pour le web scraping et l'analyse de données grâce à l'analyse de données, aux bibliothèques d'analyse HTML et aux métadonnées schema.org.


Ce tutoriel montre comment explorer le web à l'aide de Python. L'exploration du web est une approche puissante pour collecter des données sur le web en localisant toutes les URL d'un ou de plusieurs domaines.


Apprendre à utiliser Python pour le web scraping de tableaux HTML : Extraire, stocker et analyser des données | Tutoriel pour débutants
