Récupération de données sur le Web avec MechanicalSoup

Python, Comment faire, Le scraping, Sep-12-20245 minutes de lecture

Le web scraping est devenu un outil essentiel à l'ère numérique, en particulier pour les développeurs web, les analystes de données et les spécialistes du marketing numérique. Imaginez que vous puissiez extraire rapidement et efficacement des informations précieuses des sites web. C'est là que MechanicalSoup entre en jeu. Ce guide explore les subtilités de l'utilisation de MechanicalSoup pour le web scraping, en offrant des idées pratiques et des conseils pour vous aider à démarrer.

Le rôle de MechanicalSoup dans le Web Scraping

MechanicalSoup est une bibliothèque Python conçue pour simplifier le web scraping en fournissant une interface directe pour automatiser les interactions avec les pages web. Elle gère efficacement les formulaires et les liens, et peut naviguer sur des sites nécessitant des actions de base de la part de l'utilisateur, telles que la soumission de formulaires et la navigation sur des liens. Elle est donc idéale pour automatiser des tâches sur des sites web au contenu statique où des comportements complexes de l'utilisateur ne sont pas nécessaires.

Démarrage Configuration de MechanicalSoup pour le Web Scraping

Avant de nous plonger dans les spécificités du web scraping, commençons par installer MechanicalSoup. Le processus d'installation est simple et peut être réalisé en quelques étapes.

Installation de MechanicalSoup

Pour installer MechanicalSoup, il faut que Python soit installé sur votre machine. Vous pouvez ensuite utiliser pip, l'installateur de paquets de Python, pour installer MechanicalSoup. Ouvrez votre terminal et tapez la commande suivante :

pip install mechanicalsoup

Mise en place de l'environnement

Une fois MechanicalSoup installé, la mise en place de votre environnement de développement est cruciale. Vous aurez besoin d'un éditeur de code, tel que Visual Studio Code ou PyCharm, pour écrire et exécuter vos scripts Python. Assurez-vous que les bibliothèques "BeautifulSoup" et "requests" sont également installées.

Premiers pas avec MechanicalSoup

La création de votre premier script de web scraping avec MechanicalSoup implique quelques étapes de base. Commencez par importer les bibliothèques nécessaires et initialiser un objet navigateur. Voici un exemple simple pour vous aider à démarrer :

import mechanicalsoup
browser = mechanicalsoup.StatefulBrowser()
browser.open("https://www.scrapethissite.com/pages/")

Comprendre les bases du Web Scraping avec MechanicalSoup

Maintenant que MechanicalSoup est installé, explorons les bases du web scraping. Comprendre ces bases vous permettra de construire des scripts de scraping plus complexes.

Traitement des formulaires

Dans MechanicalSoup, la méthode "select_form()" est utilisée pour localiser et gérer les formulaires.
L'argument pour select_form() est un sélecteur CSS. Dans l'exemple de code ci-dessous, nous utilisons ce site pour remplir un simple formulaire de recherche à un champ. Puisque dans notre cas, il n'y a qu'un seul formulaire dans la page, browser.select_form() fera l'affaire. Sinon, vous devrez saisir le sélecteur css à la select_form() méthode
En outre, pour afficher les champs du formulaire, vous pouvez utiliser la fonction print_summary() méthode. Vous obtiendrez ainsi des informations détaillées sur chaque champ. Étant donné que le formulaire contient deux types d'éléments - des champs de texte et des boutons - nous n'aurons qu'à remplir le champ de texte et à soumettre le formulaire :

import mechanicalsoup


browser = mechanicalsoup.StatefulBrowser()
browser.open("https://www.scrapethissite.com/pages/forms/?page_num=1")

# Sélectionner le formulaire
search_form = browser.select_form()

print(search_form.print_summary())
search_form.set("q",'test')

browser.submit_selected()

Voici le résultat du code ci-dessus.

<input class="form-control" id="q" name="q" placeholder="Search for Teams" type="text"/>
<input class="btn btn-primary" type="submit" value="Search"/>

Gestion de la pagination

Le scraping web implique souvent de traiter plusieurs pages de données. MechanicalSoup n'offre pas directement la possibilité de paginer les pages à l'aide de liens de pagination.
Dans l'exemple de site web que nous utilisons, la pagination se présente comme suit :

Voici à quoi ressemble la structure HTML :

 
So what we will do is first select the list that holds the pagination links with "browser.page.select_one('ul.pagination')".
Then with ".select('li')[1::]" we select all "<li>" elements inside 'pagination' list starting from the second element. This will return a list of "<li>" elements and then we paginate each one of them in a "for loop" starting from the second element and for each "<li>" element we extract the "<a>" tag and then use it in "follow_link()" method to navigate to that page.
Here is the full example:  

import mechanicalsoup


browser = mechanicalsoup.StatefulBrowser()
browser.open("https://www.scrapethissite.com/pages/forms/?page_num=1")

for link in browser.page.select_one('ul.pagination').select('li')[1: :]:
    next_page_link = link.select_one('a')
    browser.follow_link(next_page_link)
   print(browser.url)

Mise en place proxys

Lors du scraping de sites web ou de l'automatisation d'interactions web, l'utilisation de proxys peut être cruciale pour contourner les restrictions géographiques, gérer les limites de débit ou empêcher les bannissements d'IP. En utilisant MechanicalSoup en combinaison avec la bibliothèque "requests", nous pouvons intégrer de manière transparente des configurations de proxy, ce qui vous permet de tirer parti de ces avantages de manière efficace. Voici comment vous pouvez configurer proxys dans MechanicalSoup pour vos tâches de web scraping :

import mechanicalsoup
import requests

def create_proxy_browser():
    # Define your proxy configuration (example values)
    proxies = {
        "http": "rp.proxyscrape.com:6060:username:password",
        "https": "rp.proxyscrape.com:6060:username:password",
    }

    # Create a session object with proxy settings
    session = requests.Session()
    session.proxies.update(proxies)

    # Optionally, you can add headers or other session settings here
    session.headers.update({
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    })

    # Create a MechanicalSoup StatefulBrowser using the configured session
    browser = mechanicalsoup.StatefulBrowser(session=session)
    return browser

# Usage
browser = create_proxy_browser()
response = browser.open("https://www.scrapethissite.com/pages/forms/?page_num=1")
print(response.text)  # Outputs the content of the page

Considérations éthiques et juridiques relatives à l'extraction de données sur le web (Web Scraping)

Le "web scraping" peut soulever des problèmes éthiques et juridiques. Il est essentiel de comprendre ces considérations pour éviter les problèmes potentiels.

Respecter les politiques des sites web

Vérifiez toujours les conditions d'utilisation d'un site web avant de procéder au scraping. Certains sites interdisent explicitement le scraping, tandis que d'autres peuvent avoir des lignes directrices spécifiques. Ignorer ces règles peut avoir des conséquences juridiques.

Éviter la surcharge des serveurs

Les demandes fréquentes adressées à un site web peuvent surcharger ses serveurs et provoquer des perturbations. Utilisez des délais entre les requêtes et respectez le fichier `robots.txt` du site web pour éviter cela. Voici comment ajouter un délai :

import time
time.sleep(2) # Délai de 2 secondes

Protection des données

Assurez-vous que les données que vous récupérez n'enfreignent pas les réglementations en matière de protection de la vie privée, telles que le GDPR. Les informations personnelles doivent être traitées avec précaution et n'être collectées qu'en cas de nécessité.

Conclusion

Le web scraping avec MechanicalSoup offre une solution puissante et flexible pour les développeurs web, les analystes de données et les spécialistes du marketing numérique. En suivant les étapes décrites dans ce guide, vous pouvez extraire efficacement des données précieuses des sites web, automatiser des tâches répétitives et acquérir un avantage concurrentiel dans votre domaine.

Que vous soyez un professionnel chevronné ou que vous débutiez, MechanicalSoup vous fournit les outils dont vous avez besoin pour réussir. N'oubliez pas de toujours tenir compte des aspects éthiques et juridiques, de suivre les meilleures pratiques et d'améliorer continuellement vos compétences.

Vous êtes prêt à passer à la vitesse supérieure en matière d'extraction de données sur le web ? Commencez à expérimenter MechanicalSoup dès aujourd'hui et exploitez tout le potentiel de l'extraction de données sur le web. Bon scraping !