Le scraping ou l’art de pomper une page web

scraping-website-picture

Le scraping n’est pas le diable

 

Quand tu entends parler de scrapping dans différents médias, c’est souvent dans des termes pas très élogieux. Voler le contenu, copier un site Web .. Bref, participer à l’effondrement global du système mondial.

 

Seulement, voilà.

 

Internet est une source (quasiment) intarissable pour récupérer des informations. Pour faire des statistiques potables, pour dégager des tendances ou des modèles, pour récupérer vite un grand nombre d’infos sur un sujet précis et pour plein d’autres choses encore, tu vas souvent avoir besoin de télécharger le contenu d’une page web.

Mais attention, jeune fanfaron. Les copyrights et autres protections du genre ne sont pas là que pour faire joli. Donc fais attention à l’utilisation que tu fais de ces data.

 

Brièvement, comment ça se passe ?

 

Tu vas te plonger maintenant dans le monde merveilleux des données textuelles. C’est les données de base, les plus simples à manipuler.

Comme tu le sais, pour un site Web, tout commence par une URL.

http://www.marmiton.org/recettes/recette_pates-a-la-carbonara_80453.aspx

Ce menu du bonheur va te rappeller tes années d’études, c’est cadeau.

Bref. Imaginons que pour quelque raison que ce soit, tu veuilles récupérer des recettes chez Marmiton. Solution numéro un : tu visites le site, tu copies/colles ce qui te branche dans un document texte, et tu enregistres. Y’a pas à dire, ça fonctionne. Seulement, si ton but c’est de récupérer 2764 recettes, avoue que ça va te paraître long.

Solution numéro deux : ouvre ton bloc-note préféré, et c’est parti.

 

#!/usr/bin/python3

''' IMPORTS '''
from urllib import request
from bs4 import BeautifulSoup

 

Tu devras importer deux fonctions :

La première va te permettre de récupérer le contenu de la page, la deuxième de le parcourir.

 

def scraping(URL):
    pageResponse = request.urlopen(URL)
    pageData = pageResponse.read()
    return pageData

 

On récupère donc toute la page Web grâce à notre librairie urllib. On lit la réponse avec la fonction read() et on renvoie tout ça.

 

def parsing(pageData):
    pageSoup = BeautifulSoup(pageData, 'html.parser')
    rawRecette = pageSoup.find_all('div', attrs = {'class': 'm_content_recette_todo'})
    recette = str(rawRecette[0]).split('<br/>')
    for etape in recette:
        if etape != '':
            print('- {}'.format(etape))

 

Et ensuite, il va faloir trouver les balises HTML qui contiennent l’info qui t’interesse. Pour celà, ctrl+U sur la page qui te fait de l’oeil, puis recherche ta recette dans le code.

Pour cet exemple, tu remarques que l’on recherche des balises div ayant comme attribut class la valeur m_content_recette_todo grâce à la ligne numéro 12.

Tout le reste n’est que mise en forme.

Tu peux séparer la chaine de caractère sur la séquence <br/> qui représente le saut de ligne en HTML, puis afficher chaque étape de la recette tant que ce n’est pas une chaîne vide.

 

pageWeb = scraping('http://www.marmiton.org/recettes/recette_pates-a-la-carbonara_80453.aspx')
recette = parsing(pageWeb)

 

Et voilà l’éxécution. Ce qui va te produire un joli output du genre :

 

- Cuire les pâtes dans un grand volume d'oeuf bouillante salée.
- Emincer les oignons et les faire revenir à la poêle. Dès qu'ils ont bien dorés, y ajouter les lardons.
- Préparer dans un saladier la crème fraîche, les oeufs, le sel, le poivre et mélanger.
- Retirer les lardons du feu dès qu'ils sont dorés et les ajouter à la crème.
- Une fois les pâtes cuite al dente, les égoutter et y incorporer la crème.
- Remettre sur le feu si le plat a refroidi.
- Servir et bon appétit !
- Vous pouvez également agrémenter votre plat avec des champignons.

 

Tu peux maintenant tranquillement donner la liste des URLs des recettes que tu veux récupérer (même si tu en as 2764) à ces deux fonctions et aller te faire un joli livre de cuisine en y collant des paillettes.

 

 

Allez, aux fourneaux.

 

 

PS : Le code, si tu as peur de recopier 20 lignes avec des fautes.

 

3 commentaires sur “Le scraping ou l’art de pomper une page web

Laisser un commentaire