Extraire ingrédient d’une recette de marmiton grâce à python

1 minute(s) de lecture

logo provenant du site marmiton

logo marmiton

Aujourd’hui, on va voir comment récupérer des informations sur un site web et pour illustrer cela on va utiliser comme exemple un petit script qui va allé récupérer automatiquement les ingrédients d’une recette présente sur le site marmiton.

Tout cela sera réalisé avec python et différent module, qui sont :

  • requests
  • BeautifulSoup

Tous les autres modules sont pressent de base dans python .

On va commencer par le script complet puis on détaillé les différentes étapes.

 

# -*- coding: utf-8 -*-
import requests
import unicodedata
from bs4 import BeautifulSoup
def FindIngredient(recette):
    response = requests.get(recette)
    soup = BeautifulSoup(response.content)
    mydivs = ((unicodedata.normalize('NFKD', soup.find("p", 
              { "class" : "m_content_recette_ingredients" }).getText())
               .encode('ascii', 'ignore').split(':'))[1].split('-'))
    for ing in mydivs:
        print ing
def FindRecette(recette):
    recherche  = str(recette).replace(" ","-")
    response = requests.get('http://www.marmiton.org/recettes/recherche.aspx?aqt='+recherche)
    soup = BeautifulSoup(response.content)
    soup2 =(str(soup.find("div", { "class" : "m_resultats_liste_recherche" }).find("a")).split('"'))[1]
    return str('http://www.marmiton.org/'+soup2)
FindIngredient(
    FindRecette(
        str(
            raw_input('recette :')
            )))

Maintenant détaillons, on va commencé par la fonction FindRecette:

On récupère le nom de la recette puis on remplace les espaces par des tirets pour construire l’url de recherche pour le site marmiton. Puis on utilise requests pour récupérer le code de la page de recherche et on donne le tout a BeautifulSoup pour que l’on puisse commencé a travailler sur le code.

En suite on utilise l’attribut find qui permet de faire une recherche dans le code html et de retourner uniquement ce qui nous intéresse dans notre cas on veut récupérer la class « m_resultats_liste_recherche » et qui se situe dans un div.

Dans cela on va refaire une recherche pour trouver les a qui sont enfaite les liens amenant a la recette qui nous intéresse puis on concatène pour avoir l’url a donné a la fonction FindIngredient.

Puis on recommence le même procédé pour la page de la recette, mais en se focalisant non plus sur les liens, mais uniquement sur la class qui contient les ingrédients.

La différence si situe autour de unicodedata car on va se retrouver avec des caractères non ascii ce qui va créer une exception dans votre script. Donc on demande à unicodedata de remplacer les codes utf-8 par des ascii avec la méthode suivante :

unicodedata.normalize(‘NFKD’,’votre text’).encode(‘ascii’, ‘ignore’)

Maintenant, vous pouvez par exemple générer de façon facile vos listes de course par rapport à ce que vous vouliez manger :).

Ce code est perfectible, mais suffit pour des choses simples.

Amusez-vous bien.

 

Catégories :

Mis à jour :