import requests
import random
import pprint
import re
import time
from collections import defaultdict
from bs4 import BeautifulSoup
import numpy as np
import tqdm
urlpage = 'https://www.crous-strasbourg.fr/restaurant/resto-u-esplanade/'
urlpage
'https://www.crous-strasbourg.fr/restaurant/resto-u-esplanade/'
res = requests.get(urlpage, headers = user_agent)
soup = BeautifulSoup(res.text, 'html.parser')
str(soup)[:2000]
'<!DOCTYPE html>\n\n<html lang="fr-FR" prefix="og: https://ogp.me/ns#">\n<head>\n<meta charset="utf-8"/>\n<title>Resto U\' Esplanade - Crous de Strasbourg</title>\n<meta content="width=device-width, initial-scale=1.0,user-scalable=yes,minimal-ui" name="viewport"/>\n<style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style>\n<!-- Optimisation des moteurs de recherche par Rank Math PRO - https://rankmath.com/ -->\n<meta content="follow, index, max-snippet:-1, max-video-preview:-1, max-image-preview:large" name="robots">\n<link href="https://www.crous-strasbourg.fr/restaurant/resto-u-esplanade-2/" rel="canonical"/>\n<meta content="fr_FR" property="og:locale">\n<meta content="article" property="og:type"/>\n<meta content="Resto U\' Esplanade - Crous de Strasbourg" property="og:title"/>\n<meta content="https://www.crous-strasbourg.fr/restaurant/resto-u-esplanade-2/" property="og:url"/>\n<meta content="Lyon" property="og:site_name"/>\n<meta content="https://www.crous-strasbourg.fr/wp-content/uploads/sites/29/2022/11/Logo.jpg" property="og:image"/>\n<meta content="https://www.crous-strasbourg.fr/wp-content/uploads/sites/29/2022/11/Logo.jpg" property="og:image:secure_url"/>\n<meta content="1200" property="og:image:width"/>\n<meta content="630" property="og:image:height"/>\n<meta content="Resto U’ Esplanade" property="og:image:alt"/>\n<meta content="image/jpeg" property="og:image:type"/>\n<meta content="summary_large_image" name="twitter:card"/>\n<meta content="Resto U\' Esplanade - Crous de Strasbourg" name="twitter:title"/>\n<meta content="https://www.crous-strasbourg.fr/wp-content/uploads/sites/29/2022/11/Logo.jpg" name="twitter:image"/>\n<!-- /Extension Rank Math WordPress SEO -->\n<link href="//cdn.jsdelivr.net" rel="dns-prefetch"/>\n<link href="//unpkg.com" rel="dns-prefetch"/>\n<link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>\n<link href="https://www.crous-strasbourg.fr/wp-content/plugins/events-calendar-pro/src/resources/css/tribe-eve'
'menu'
seems to be a good option to get meals in a structured way. 'menu'
is the html class and 'div'
is the element: <div class="menu">
contents = re.findall('<div class="menu">.*?\n</div>\n</div>',str(soup), re.DOTALL)
print(contents[0])
<div class="menu"> <div class="menu_date"> <div class="prev"></div> <time class="menu_date_title">Menu du lundi 24 mars 2025</time> <div class="next"></div> </div> <div class="meal"> <div class="meal_title">Déjeuner</div> <ul class="meal_foodies"> <li>Menus étudiants 1er et 2ème étage<ul><li>2ème étage :</li><li>Cordon bleu, sauce crème</li><li>Petits pois</li><li>Frites</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li><li>1er étage :</li><li>Poisson aux amandes</li><li>Petits pois</li><li>Blé safrané</li><li>-</li><li>Torsades, sauce bolognaise maison</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li></ul></li><li>Desserts 1er et 2ème étage<ul><li>Paris-Brest</li><li>Tarte au citron</li><li>Compote de pommes aux spéculoos</li></ul></li><li>Cristal Shop (RDC) Cafétéria<ul><li>Plat à emporter en box en verre ou sur place</li><li>Poisson aux amandes</li><li>Petits pois</li><li>Blé safrané</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li></ul></li><li>Origines de nos viandes du jour<ul><li>Volaille origine France</li></ul></li> </ul> </div> <div class="meal"> <div class="meal_title">Dîner</div> <ul class="meal_foodies"> <li>Menus étudiants 2ème étage<ul><li>Fricadelle de boeuf, sauce crème</li><li>Haricots verts</li><li>Pommes de terre rôties</li><li>-</li><li>Gratin de pâtes arrabiata</li></ul></li><li>Desserts 2ème étage<ul><li>Paris-Brest</li><li>Tarte au citron</li><li>Compote de pommes aux spéculoos</li></ul></li><li>Origines de nos viandes du jour<ul><li>menu non communiqué</li></ul></li> </ul> </div> </div>
# Return elements that matched the html class in a list
contents = soup.find_all('div' ,class_= 'menu')
contents[0]
<div class="menu"> <div class="menu_date"> <div class="prev"></div> <time class="menu_date_title">Menu du lundi 24 mars 2025</time> <div class="next"></div> </div> <div class="meal"> <div class="meal_title">Déjeuner</div> <ul class="meal_foodies"> <li>Menus étudiants 1er et 2ème étage<ul><li>2ème étage :</li><li>Cordon bleu, sauce crème</li><li>Petits pois</li><li>Frites</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li><li>1er étage :</li><li>Poisson aux amandes</li><li>Petits pois</li><li>Blé safrané</li><li>-</li><li>Torsades, sauce bolognaise maison</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li></ul></li><li>Desserts 1er et 2ème étage<ul><li>Paris-Brest</li><li>Tarte au citron</li><li>Compote de pommes aux spéculoos</li></ul></li><li>Cristal Shop (RDC) Cafétéria<ul><li>Plat à emporter en box en verre ou sur place</li><li>Poisson aux amandes</li><li>Petits pois</li><li>Blé safrané</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li></ul></li><li>Origines de nos viandes du jour<ul><li>Volaille origine France</li></ul></li> </ul> </div> <div class="meal"> <div class="meal_title">Dîner</div> <ul class="meal_foodies"> <li>Menus étudiants 2ème étage<ul><li>Fricadelle de boeuf, sauce crème</li><li>Haricots verts</li><li>Pommes de terre rôties</li><li>-</li><li>Gratin de pâtes arrabiata</li></ul></li><li>Desserts 2ème étage<ul><li>Paris-Brest</li><li>Tarte au citron</li><li>Compote de pommes aux spéculoos</li></ul></li><li>Origines de nos viandes du jour<ul><li>menu non communiqué</li></ul></li> </ul> </div> </div>
def get_page(urlpage):
"""
From an link and a html class that you select by inspecting manually the page
Return a list with elements that matched this class
"""
# Get page in html
time.sleep(7 + random.uniform(0,8))
res = requests.get(urlpage, headers = user_agent)
soup = BeautifulSoup(res.text, 'html.parser')
return str(soup)
soup = get_page(urlpage)
# Return elements that matched the html class in a list
contents = re.findall('<div class="menu">.*?\n</div>\n</div>',str(soup), re.DOTALL)
content = contents[0]
print(content)
<div class="menu"> <div class="menu_date"> <div class="prev"></div> <time class="menu_date_title">Menu du lundi 24 mars 2025</time> <div class="next"></div> </div> <div class="meal"> <div class="meal_title">Déjeuner</div> <ul class="meal_foodies"> <li>Menus étudiants 1er et 2ème étage<ul><li>2ème étage :</li><li>Cordon bleu, sauce crème</li><li>Petits pois</li><li>Frites</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li><li>1er étage :</li><li>Poisson aux amandes</li><li>Petits pois</li><li>Blé safrané</li><li>-</li><li>Torsades, sauce bolognaise maison</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li></ul></li><li>Desserts 1er et 2ème étage<ul><li>Paris-Brest</li><li>Tarte au citron</li><li>Compote de pommes aux spéculoos</li></ul></li><li>Cristal Shop (RDC) Cafétéria<ul><li>Plat à emporter en box en verre ou sur place</li><li>Poisson aux amandes</li><li>Petits pois</li><li>Blé safrané</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li></ul></li><li>Origines de nos viandes du jour<ul><li>Volaille origine France</li></ul></li> </ul> </div> <div class="meal"> <div class="meal_title">Dîner</div> <ul class="meal_foodies"> <li>Menus étudiants 2ème étage<ul><li>Fricadelle de boeuf, sauce crème</li><li>Haricots verts</li><li>Pommes de terre rôties</li><li>-</li><li>Gratin de pâtes arrabiata</li></ul></li><li>Desserts 2ème étage<ul><li>Paris-Brest</li><li>Tarte au citron</li><li>Compote de pommes aux spéculoos</li></ul></li><li>Origines de nos viandes du jour<ul><li>menu non communiqué</li></ul></li> </ul> </div> </div>
meals = str(content).split('<div class="meal">')
for meal in meals:
print(meal)
<div class="menu"> <div class="menu_date"> <div class="prev"></div> <time class="menu_date_title">Menu du lundi 24 mars 2025</time> <div class="next"></div> </div> <div class="meal_title">Déjeuner</div> <ul class="meal_foodies"> <li>Menus étudiants 1er et 2ème étage<ul><li>2ème étage :</li><li>Cordon bleu, sauce crème</li><li>Petits pois</li><li>Frites</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li><li>1er étage :</li><li>Poisson aux amandes</li><li>Petits pois</li><li>Blé safrané</li><li>-</li><li>Torsades, sauce bolognaise maison</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li></ul></li><li>Desserts 1er et 2ème étage<ul><li>Paris-Brest</li><li>Tarte au citron</li><li>Compote de pommes aux spéculoos</li></ul></li><li>Cristal Shop (RDC) Cafétéria<ul><li>Plat à emporter en box en verre ou sur place</li><li>Poisson aux amandes</li><li>Petits pois</li><li>Blé safrané</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li></ul></li><li>Origines de nos viandes du jour<ul><li>Volaille origine France</li></ul></li> </ul> </div> <div class="meal_title">Dîner</div> <ul class="meal_foodies"> <li>Menus étudiants 2ème étage<ul><li>Fricadelle de boeuf, sauce crème</li><li>Haricots verts</li><li>Pommes de terre rôties</li><li>-</li><li>Gratin de pâtes arrabiata</li></ul></li><li>Desserts 2ème étage<ul><li>Paris-Brest</li><li>Tarte au citron</li><li>Compote de pommes aux spéculoos</li></ul></li><li>Origines de nos viandes du jour<ul><li>menu non communiqué</li></ul></li> </ul> </div> </div>
We want everything between <time class="menu_date_title">Menu du
and the first </time>
that appears, we can just catch the group of character between these two entities. Create a group with ()
to extract this part with re.findall
:
.
*
after the .
?
will control for the repetition </time>
, so when it will meet the first </time>
, it will stop.You will then try to find if there is some stuff in your string that match this condition. The regex will be written '<time class="menu_date_title">Menu du (.*?)</time>'
. Of course it doen't mean there are no other way of doing it or even writting it, but it works and it's pretty simple to read.
date = re.findall('<time class="menu_date_title">Menu du (.*?)</time>',str(content))
print(date)
['lundi 24 mars 2025']
meals = meals[1:]
for meal in meals:
print(meal)
<div class="meal_title">Déjeuner</div> <ul class="meal_foodies"> <li>Menus étudiants 1er et 2ème étage<ul><li>2ème étage :</li><li>Cordon bleu, sauce crème</li><li>Petits pois</li><li>Frites</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li><li>1er étage :</li><li>Poisson aux amandes</li><li>Petits pois</li><li>Blé safrané</li><li>-</li><li>Torsades, sauce bolognaise maison</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li></ul></li><li>Desserts 1er et 2ème étage<ul><li>Paris-Brest</li><li>Tarte au citron</li><li>Compote de pommes aux spéculoos</li></ul></li><li>Cristal Shop (RDC) Cafétéria<ul><li>Plat à emporter en box en verre ou sur place</li><li>Poisson aux amandes</li><li>Petits pois</li><li>Blé safrané</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li></ul></li><li>Origines de nos viandes du jour<ul><li>Volaille origine France</li></ul></li> </ul> </div> <div class="meal_title">Dîner</div> <ul class="meal_foodies"> <li>Menus étudiants 2ème étage<ul><li>Fricadelle de boeuf, sauce crème</li><li>Haricots verts</li><li>Pommes de terre rôties</li><li>-</li><li>Gratin de pâtes arrabiata</li></ul></li><li>Desserts 2ème étage<ul><li>Paris-Brest</li><li>Tarte au citron</li><li>Compote de pommes aux spéculoos</li></ul></li><li>Origines de nos viandes du jour<ul><li>menu non communiqué</li></ul></li> </ul> </div> </div>
types = re.findall('<div class="meal_title">(.*?)</div>',str(content))
print(types)
meal_foodies = meals[0].split('</ul></li>')[:-1]
meal_foodies
['Déjeuner', 'Dîner']
['\n<div class="meal_title">Déjeuner</div>\n<ul class="meal_foodies">\n<li>Menus étudiants 1er et 2ème étage<ul><li>2ème étage :</li><li>Cordon bleu, sauce crème</li><li>Petits pois</li><li>Frites</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li><li>1er étage :</li><li>Poisson aux amandes</li><li>Petits pois</li><li>Blé safrané</li><li>-</li><li>Torsades, sauce bolognaise maison</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li>', '<li>Desserts 1er et 2ème étage<ul><li>Paris-Brest</li><li>Tarte au citron</li><li>Compote de pommes aux spéculoos</li>', '<li>Cristal Shop (RDC) Cafétéria<ul><li>Plat à emporter en box en verre ou sur place</li><li>Poisson aux amandes</li><li>Petits pois</li><li>Blé safrané</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li>', '<li>Origines de nos viandes du jour<ul><li>Volaille origine France</li>']
It's still very dirty down there, let's clean it up!
Let's retrieve everything within <li></li>
.
pole, meal = meal_foodies[0].split('<ul>')
print(meal)
<li>2ème étage :</li><li>Cordon bleu, sauce crème</li><li>Petits pois</li><li>Frites</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li><li>1er étage :</li><li>Poisson aux amandes</li><li>Petits pois</li><li>Blé safrané</li><li>-</li><li>Torsades, sauce bolognaise maison</li><li>-</li><li>Galette de quinoa provençale, sauce tomate</li><li>Petits pois</li><li>Blé safrané</li>
print(pole)
print('-----')
pole = re.search('<li>(.+)',pole).group(1)
print(pole)
<div class="meal_title">Déjeuner</div> <ul class="meal_foodies"> <li>Menus étudiants 1er et 2ème étage ----- Menus étudiants 1er et 2ème étage
details = re.findall('<li>(.*?)</li>',
meal)
details
['2ème étage :', 'Cordon bleu, sauce crème', 'Petits pois', 'Frites', '-', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané', '1er étage :', 'Poisson aux amandes', 'Petits pois', 'Blé safrané', '-', 'Torsades, sauce bolognaise maison', '-', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané']
pole_menu = dict()
for meal_foodie in meal_foodies:
pole, meal = meal_foodie.split('<ul>')
pole = re.search('<li>(.+)',pole).group(1)
details = re.findall('<li>(.*?)</li>',
meal)
clean_details = [detail for detail in details if detail != '-']
if 'Origine' not in pole:
pole_menu.update({pole:clean_details})
pole_menu
{'Menus étudiants 1er et 2ème étage': ['2ème étage :', 'Cordon bleu, sauce crème', 'Petits pois', 'Frites', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané', '1er étage :', 'Poisson aux amandes', 'Petits pois', 'Blé safrané', 'Torsades, sauce bolognaise maison', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané'], 'Desserts 1er et 2ème étage': ['Paris-Brest', 'Tarte au citron', 'Compote de pommes aux spéculoos'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Poisson aux amandes', 'Petits pois', 'Blé safrané', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané']}
content = contents[0]
meals = str(content).split('<div class="meal">')
meals = meals[1:]
date = re.findall('<time class="menu_date_title">Menu du (.*?)</time>',str(content))
all_meals = dict()
for meal in meals:
pole_menu = dict()
meal_foodies = meal.split('</ul></li>')[:-1]
meal_type = re.findall('<div class="meal_title">(.*?)</div>',meal)[0]
for meal_foodie in meal_foodies:
pole, foodie = meal_foodie.split('<ul>')
pole = re.search('<li>(.+)',pole).group(1)
details = re.findall('<li>(.*?)</li>',
foodie)
clean_details = [detail for detail in details if detail != '-']
if 'Origine' not in pole:
pole_menu.update({pole:clean_details})
all_meals.update({meal_type:pole_menu})
all_meals
{'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['2ème étage :', 'Cordon bleu, sauce crème', 'Petits pois', 'Frites', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané', '1er étage :', 'Poisson aux amandes', 'Petits pois', 'Blé safrané', 'Torsades, sauce bolognaise maison', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané'], 'Desserts 1er et 2ème étage': ['Paris-Brest', 'Tarte au citron', 'Compote de pommes aux spéculoos'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Poisson aux amandes', 'Petits pois', 'Blé safrané', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané']}, 'Dîner': {'Menus étudiants 2ème étage': ['Fricadelle de boeuf, sauce crème', 'Haricots verts', 'Pommes de terre rôties', 'Gratin de pâtes arrabiata'], 'Desserts 2ème étage': ['Paris-Brest', 'Tarte au citron', 'Compote de pommes aux spéculoos']}}
We know now two things :
let's create a function!
def get_details(meal_foodie):
"""
Get meal content and pole name
"""
# Separate name and food
pole, foodie = meal_foodie.split('<ul>')
# Extract meals keeping everything between <li> and </li>
details = re.findall('<li>(.*?)</li>',
foodie)
# Clean name
pole = re.search('<li>(.+)',pole).group(1)
return pole, details
def get_pole_menu(meal_foodies):
"""
Iterate over each pole and store the information about the meal
"""
pole_menu = dict()
# Iterate over each possble choice
for meal_foodie in meal_foodies:
pole, details = get_details(meal_foodie)
clean_details = [detail for detail in details if detail != '-']
# Update the dictionary
if 'Origine' not in pole:
pole_menu.update({pole:clean_details})
return pole_menu
def clean_meals(content):
"""
Separate lunch and dinner, remove first element as it does not contains information about food
"""
meals = str(content).split('<div class="meal">')
meals = meals[1:]
return meals
def get_date(content):
"""
Get date
"""
date = re.findall('<time class="menu_date_title">Menu du (.*?)</time>',str(content))[0]
return date
def get_meal_type(meal):
"""
Are you having lunch or dinner?
"""
meal_type = re.findall('<div class="meal_title">(.*?)</div>',meal)[0]
return meal_type
def get_all_meals_for_given_date(content):
"""
Put all the functions together, return date and all meal for a given restaurant at a gevien date
"""
date = get_date(content)
meals = clean_meals(content)
all_meals = dict()
# Iterate over each meal
for meal in meals:
meal_foodies = meal.split('</ul></li>')[:-1]
meal_type = get_meal_type(meal)
pole_menu = get_pole_menu(meal_foodies)
# Store the resulte
all_meals.update({meal_type:pole_menu})
return date ,all_meals
get_all_meals_for_given_date(contents[0])
('lundi 24 mars 2025', {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['2ème étage :', 'Cordon bleu, sauce crème', 'Petits pois', 'Frites', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané', '1er étage :', 'Poisson aux amandes', 'Petits pois', 'Blé safrané', 'Torsades, sauce bolognaise maison', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané'], 'Desserts 1er et 2ème étage': ['Paris-Brest', 'Tarte au citron', 'Compote de pommes aux spéculoos'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Poisson aux amandes', 'Petits pois', 'Blé safrané', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané']}, 'Dîner': {'Menus étudiants 2ème étage': ['Fricadelle de boeuf, sauce crème', 'Haricots verts', 'Pommes de terre rôties', 'Gratin de pâtes arrabiata'], 'Desserts 2ème étage': ['Paris-Brest', 'Tarte au citron', 'Compote de pommes aux spéculoos']}})
for content in contents:
print(get_all_meals_for_given_date(content))
print('--------------------------------')
('lundi 24 mars 2025', {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['2ème étage :', 'Cordon bleu, sauce crème', 'Petits pois', 'Frites', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané', '1er étage :', 'Poisson aux amandes', 'Petits pois', 'Blé safrané', 'Torsades, sauce bolognaise maison', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané'], 'Desserts 1er et 2ème étage': ['Paris-Brest', 'Tarte au citron', 'Compote de pommes aux spéculoos'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Poisson aux amandes', 'Petits pois', 'Blé safrané', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané']}, 'Dîner': {'Menus étudiants 2ème étage': ['Fricadelle de boeuf, sauce crème', 'Haricots verts', 'Pommes de terre rôties', 'Gratin de pâtes arrabiata'], 'Desserts 2ème étage': ['Paris-Brest', 'Tarte au citron', 'Compote de pommes aux spéculoos']}}) -------------------------------- ('mardi 25 mars 2025', {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['2ème étage :', 'Fricadelle de boeuf, sauce marchand de vin', 'Duo de carottes', 'Frites', 'Curry de pois chiches aux légumes maison', 'Riz pilaf', '1er étage :', 'Croûte de volaille aux champignons', 'Duo de carottes', 'Riz pilaf', 'Torsades, sauce carbonara maison', 'Curry de pois chiches aux légumes maison', 'Riz pilaf'], 'Desserts 1er et 2ème étage': ['Crème vanille', 'Donut', 'Eclair au chocolat'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Croûte de volaille aux champignons', 'Duo de carottes', 'Riz pilaf', 'Curry de pois chiches aux légumes maison', 'Riz pilaf']}, 'Dîner': {'Menus étudiants 2ème étage': ['Palette à la diable', 'Petits pois carottes', 'Pommes de terre rôties', 'Aiguillettes de blé, sauce rémoulade', 'Petits pois carottes', 'Pommes de terre rôties'], 'Desserts 2ème étage': ['Crème vanille', 'Donut', 'Eclair au chocolat']}}) -------------------------------- ('mercredi 26 mars 2025', {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['JOURNEE VERTE', '2ème étage :', 'Chili aux lentilles', 'Riz pilaf', 'Tajine aux abricots et pois chiches', 'Boulgour aux épices', '1er étage :', 'Gratin de légumes', 'Polenta', 'Tajine aux abricots et pois chiches', 'Boulgour aux épices'], 'Desserts 1er et 2ème étage': ['Gâteau quinoa pommes', 'Fondant au citron', 'Cocktail de fruits'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Gratin de légumes', 'Polenta', 'Tajine aux abricots et pois chiches', 'Boulgour aux épices']}, 'Dîner': {'Menus étudiants 2ème étage': ['Boulettes de pois chiches BIO, raïta de concombre BIO', 'Haricots verts BIO', 'Boulgour BIO', 'Torsades aux courgettes et pois BIO'], 'Desserts 2ème étage': ['Tarte aux pommes BIO', 'Flan au caramel BIO']}}) -------------------------------- ('jeudi 27 mars 2025', {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['2ème étage:', 'Poutine', 'Frites', 'Samoussa aux légumes, sauce au miel', 'Nouilles chinoises', 'Wok de légumes', '1er étage :', 'Pilons de poulet à la citronnelle', 'Nouilles chinoises', 'Wok de légumes', 'Torsades, sauce aux 3 fromages maison', 'Samoussa aux légumes, sauce au miel', 'Nouilles chinoises', 'Wok de légumes'], 'Desserts 1er et 2ème étage': ['Millefeuille vanille', 'Tarte aux pommes', 'Fromage blanc aux griottes'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Pilons de poulet à la citronnelle', 'Nouilles chinoises', 'Wok de légumes', 'Samoussa aux légumes, sauce au miel', 'Nouilles chinoises', 'Wok de légumes']}, 'Dîner': {'Menus étudiants 2ème étage': ['Chili con carné maison', 'Fajitas de haricots rouges tex mex maison', 'Poêlée mexicaine'], 'Desserts 2ème étage': ['Millefeuille vanille', 'Tarte aux pommes', 'Fromage blanc aux griottes']}}) -------------------------------- ('vendredi 28 mars 2025', {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['2ème étage :', 'Merguez, sauce tomate', 'Zaalouk de chou-fleur', 'Frites', 'Quiche aux pommes de terre et épinards', 'Haricots verts', 'Torsades', '1er étage :', 'Echine de porc, sauce à la bière', 'Haricots verts', 'Purée de pommes de terre', 'Torsades, sauce aux 2 saumon maison', 'Quiche aux pommes de terre et épinards', 'Haricots verts', 'Torsades'], 'Desserts 1er et 2ème étage': ['Beignet aux framboises', 'Eclair au café', 'Tiramisu'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Echine de porc, sauce à la bière', 'Haricots verts', 'Purée de pommes de terre', 'Quiche aux pommes de terre et épinards', 'Haricots verts', 'Torsades']}, 'Dîner': {'Menus étudiants 2ème étage': ['Cordon bleu, sauce tomate', 'Carottes au céleri branche', 'Gratin dauphinois'], 'Desserts 2ème étage': ['Beignet aux framboises', 'Eclair au café', 'Tiramisu']}}) --------------------------------
Now we need to get all restaurants urls, we will them here : https://www.crous-strasbourg.fr/se-restaurer/ou-manger/
Use the get_page function, specify 'article'
and ''
because we want to catch up <article>
.
time.sleep(7 + random.uniform(0,8))
urlpage = 'https://www.crous-strasbourg.fr/se-restaurer/ou-manger/'
res = requests.get(urlpage, headers = user_agent)
soup = BeautifulSoup(res.text, 'html.parser')
links = re.findall('href="(.*?)">',str(soup))
links[75:95]
['https://www.crous-strasbourg.fr/restaurant/le-32-2/', 'https://www.crous-strasbourg.fr/restaurant/le-cristal-shop-ru-esplanade-2/', 'https://www.crous-strasbourg.fr/restaurant/le-stift/', 'https://www.crous-strasbourg.fr/restaurant/learning-center-2/', 'https://www.crous-strasbourg.fr/restaurant/ort-laure-weil/', 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-centre-hospitalier-derstein/', 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-centre-hospitalier-sainte-catherine/', 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-blaise-pascal/', 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-dr-eugene-koeberle/', 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-jean-mermoz/', 'https://www.crous-strasbourg.fr/restaurant/resto-u-cronenbourg-2/', 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-colmar-2/', 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-lillberg-2/', 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-liut-mulhouse-2/', 'https://www.crous-strasbourg.fr/restaurant/resto-u-esplanade-2/', 'https://www.crous-strasbourg.fr/restaurant/resto-u-gallia-2/', 'https://www.crous-strasbourg.fr/restaurant/resto-u-illkirch-2/', 'https://www.crous-strasbourg.fr/restaurant/resto-u-paul-appell/', 'https://www.calameo.com/crous-strasbourg/read/006703930bee6a9405174" rel="noopener" target="_blank', 'https://strasbourg.crousandgo.fr/" rel="noopener" target="_blank']
We can see that relevant links contains 'restaurant'.
Iterate over the list of links, check if restaurant
can be matched in the url.
cleaned_links = {}
for link in links:
if '/restaurant/' in link:
link = str(link)
name = re.findall('restaurant/(.*)/',link)[0]
name = re.sub('-',' ',name)
name = re.sub(' 2','',name)
name = name.title()
cleaned_links.update({name:link})
cleaned_links
{'Cafeteria De La Fac De Droit': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-de-la-fac-de-droit-2/', 'Cafeteria De La Fonderie': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-de-la-fonderie-2/', 'Cafeteria Illkirch': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-illkirch-2/', 'Cafeteria La Misha': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-la-misha-2/', 'Cafeteria Le Cardo': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-le-cardo-2/', 'Cafeteria Le Patio': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-le-patio-2/', 'Cafeteria Le Pege': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-le-pege-2/', 'Cafeteria Mini R': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-mini-r-2/', 'Cybercafe Ru Illberg': 'https://www.crous-strasbourg.fr/restaurant/cybercafe-ru-illberg-2/', 'Fec': 'https://www.crous-strasbourg.fr/restaurant/fec/', 'Kiosque Ru Esplanade': 'https://www.crous-strasbourg.fr/restaurant/kiosque-ru-esplanade/', 'Lannexe': 'https://www.crous-strasbourg.fr/restaurant/lannexe-2/', 'Le 32': 'https://www.crous-strasbourg.fr/restaurant/le-32-2/', 'Le Cristal Shop Ru Esplanade': 'https://www.crous-strasbourg.fr/restaurant/le-cristal-shop-ru-esplanade-2/', 'Le Stift': 'https://www.crous-strasbourg.fr/restaurant/le-stift/', 'Learning Center': 'https://www.crous-strasbourg.fr/restaurant/learning-center-2/', 'Ort Laure Weil': 'https://www.crous-strasbourg.fr/restaurant/ort-laure-weil/', 'Restaurant Du Centre Hospitalier Derstein': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-centre-hospitalier-derstein/', 'Restaurant Du Centre Hospitalier Sainte Catherine': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-centre-hospitalier-sainte-catherine/', 'Restaurant Du Lycee Blaise Pascal': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-blaise-pascal/', 'Restaurant Du Lycee Dr Eugene Koeberle': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-dr-eugene-koeberle/', 'Restaurant Du Lycee Jean Mermoz': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-jean-mermoz/', 'Resto U Cronenbourg': 'https://www.crous-strasbourg.fr/restaurant/resto-u-cronenbourg-2/', 'Resto U De Colmar': 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-colmar-2/', 'Resto U De Lillberg': 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-lillberg-2/', 'Resto U De Liut Mulhouse': 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-liut-mulhouse-2/', 'Resto U Esplanade': 'https://www.crous-strasbourg.fr/restaurant/resto-u-esplanade-2/', 'Resto U Gallia': 'https://www.crous-strasbourg.fr/restaurant/resto-u-gallia-2/', 'Resto U Illkirch': 'https://www.crous-strasbourg.fr/restaurant/resto-u-illkirch-2/', 'Resto U Paul Appell': 'https://www.crous-strasbourg.fr/restaurant/resto-u-paul-appell/'}
def get_all_links():
"""
Get all restaurants links and create a dict of link with ru_names as keys
"""
# Webpage from which we extract all links
urlpage = 'https://www.crous-strasbourg.fr/se-restaurer/ou-manger/'
# Use our get_page function to extract a list with all link
time.sleep(7 + random.uniform(0,8))
res = requests.get(urlpage, headers = user_agent)
soup = BeautifulSoup(res.text, 'html.parser')
links = re.findall('href="(.*?)">',str(soup))
# Create an empty dict
names_links = {}
# Iterate over each link
for link in links:
if '/restaurant/' in link:
link = str(link)
name = re.findall('restaurant/(.*)/',link)[0]
name = re.sub('-',' ',name)
name = re.sub(' 2','',name)
name = name.title()
names_links.update({name:link})
print(names_links)
return names_links
It seems that everything works fine, let's put all together!
The basis of our final step will be as follow:
links = get_all_links()
links
{'Cafeteria De La Fac De Droit': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-de-la-fac-de-droit-2/', 'Cafeteria De La Fonderie': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-de-la-fonderie-2/', 'Cafeteria Illkirch': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-illkirch-2/', 'Cafeteria La Misha': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-la-misha-2/', 'Cafeteria Le Cardo': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-le-cardo-2/', 'Cafeteria Le Patio': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-le-patio-2/', 'Cafeteria Le Pege': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-le-pege-2/', 'Cafeteria Mini R': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-mini-r-2/', 'Cybercafe Ru Illberg': 'https://www.crous-strasbourg.fr/restaurant/cybercafe-ru-illberg-2/', 'Fec': 'https://www.crous-strasbourg.fr/restaurant/fec/', 'Kiosque Ru Esplanade': 'https://www.crous-strasbourg.fr/restaurant/kiosque-ru-esplanade/', 'Lannexe': 'https://www.crous-strasbourg.fr/restaurant/lannexe-2/', 'Le 32': 'https://www.crous-strasbourg.fr/restaurant/le-32-2/', 'Le Cristal Shop Ru Esplanade': 'https://www.crous-strasbourg.fr/restaurant/le-cristal-shop-ru-esplanade-2/', 'Le Stift': 'https://www.crous-strasbourg.fr/restaurant/le-stift/', 'Learning Center': 'https://www.crous-strasbourg.fr/restaurant/learning-center-2/', 'Ort Laure Weil': 'https://www.crous-strasbourg.fr/restaurant/ort-laure-weil/', 'Restaurant Du Centre Hospitalier Derstein': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-centre-hospitalier-derstein/', 'Restaurant Du Centre Hospitalier Sainte Catherine': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-centre-hospitalier-sainte-catherine/', 'Restaurant Du Lycee Blaise Pascal': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-blaise-pascal/', 'Restaurant Du Lycee Dr Eugene Koeberle': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-dr-eugene-koeberle/', 'Restaurant Du Lycee Jean Mermoz': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-jean-mermoz/', 'Resto U Cronenbourg': 'https://www.crous-strasbourg.fr/restaurant/resto-u-cronenbourg-2/', 'Resto U De Colmar': 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-colmar-2/', 'Resto U De Lillberg': 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-lillberg-2/', 'Resto U De Liut Mulhouse': 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-liut-mulhouse-2/', 'Resto U Esplanade': 'https://www.crous-strasbourg.fr/restaurant/resto-u-esplanade-2/', 'Resto U Gallia': 'https://www.crous-strasbourg.fr/restaurant/resto-u-gallia-2/', 'Resto U Illkirch': 'https://www.crous-strasbourg.fr/restaurant/resto-u-illkirch-2/', 'Resto U Paul Appell': 'https://www.crous-strasbourg.fr/restaurant/resto-u-paul-appell/'}
{'Cafeteria De La Fac De Droit': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-de-la-fac-de-droit-2/', 'Cafeteria De La Fonderie': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-de-la-fonderie-2/', 'Cafeteria Illkirch': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-illkirch-2/', 'Cafeteria La Misha': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-la-misha-2/', 'Cafeteria Le Cardo': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-le-cardo-2/', 'Cafeteria Le Patio': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-le-patio-2/', 'Cafeteria Le Pege': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-le-pege-2/', 'Cafeteria Mini R': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-mini-r-2/', 'Cybercafe Ru Illberg': 'https://www.crous-strasbourg.fr/restaurant/cybercafe-ru-illberg-2/', 'Fec': 'https://www.crous-strasbourg.fr/restaurant/fec/', 'Kiosque Ru Esplanade': 'https://www.crous-strasbourg.fr/restaurant/kiosque-ru-esplanade/', 'Lannexe': 'https://www.crous-strasbourg.fr/restaurant/lannexe-2/', 'Le 32': 'https://www.crous-strasbourg.fr/restaurant/le-32-2/', 'Le Cristal Shop Ru Esplanade': 'https://www.crous-strasbourg.fr/restaurant/le-cristal-shop-ru-esplanade-2/', 'Le Stift': 'https://www.crous-strasbourg.fr/restaurant/le-stift/', 'Learning Center': 'https://www.crous-strasbourg.fr/restaurant/learning-center-2/', 'Ort Laure Weil': 'https://www.crous-strasbourg.fr/restaurant/ort-laure-weil/', 'Restaurant Du Centre Hospitalier Derstein': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-centre-hospitalier-derstein/', 'Restaurant Du Centre Hospitalier Sainte Catherine': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-centre-hospitalier-sainte-catherine/', 'Restaurant Du Lycee Blaise Pascal': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-blaise-pascal/', 'Restaurant Du Lycee Dr Eugene Koeberle': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-dr-eugene-koeberle/', 'Restaurant Du Lycee Jean Mermoz': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-jean-mermoz/', 'Resto U Cronenbourg': 'https://www.crous-strasbourg.fr/restaurant/resto-u-cronenbourg-2/', 'Resto U De Colmar': 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-colmar-2/', 'Resto U De Lillberg': 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-lillberg-2/', 'Resto U De Liut Mulhouse': 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-liut-mulhouse-2/', 'Resto U Esplanade': 'https://www.crous-strasbourg.fr/restaurant/resto-u-esplanade-2/', 'Resto U Gallia': 'https://www.crous-strasbourg.fr/restaurant/resto-u-gallia-2/', 'Resto U Illkirch': 'https://www.crous-strasbourg.fr/restaurant/resto-u-illkirch-2/', 'Resto U Paul Appell': 'https://www.crous-strasbourg.fr/restaurant/resto-u-paul-appell/'}
all_dates_all_menus = defaultdict(dict)
for name in tqdm.tqdm(links):
soup_ = get_page(links[name])
contents = re.findall('<div class="menu">.*?\n</div>\n</div>',soup_, re.DOTALL)
for content in contents:
date ,all_meals = get_all_meals_for_given_date(content)
all_dates_all_menus[date].update({name:all_meals})
all_dates_all_menus
100%|██████████| 30/30 [10:30<00:00, 21.01s/it]
defaultdict(dict, {'lundi 24 mars 2025': {'Cafeteria De La Fonderie': {'Déjeuner': {'menu étudiant tarif social': ['Chili con carne/riz pilaf', '(Haché origine ou provenance France)', 'OU', 'Cari de carottes lentilles et quinoa'], 'Sandwich': ['Le Maraicher', 'Le Parisien', 'Le Berger', 'Bagnat Manon', 'Chaud: Bruschettas margarita'], 'Box de pâtes': ['Pasta au saumon'], 'Salade': ['Végé bowl']}}, 'Cafeteria Le Pege': {'Déjeuner': {'Petit-déjeuner': ['Café & Viennoiseries', '7h30 -10h30'], 'Plat du jour': ['Émincé de dinde à l’Indienne ', 'Brunoise de légumes', 'Quinoa de Plobsheim ou frites'], 'Végétarien': ['Biryani & bouchées végétales', 'Brunoise de légumes', 'Quinoa de Plobsheim ou frites']}}, 'Cafeteria Mini R': {'Déjeuner': {'Fermeture': ['Structure fermée du Lundi 24 Mars 2025 au Vendredi 28 Mars 2025']}}, 'Cybercafe Ru Illberg': {'Déjeuner': {'Sandwichs': ['Le Végéta', 'Le Parisien', "L'Indien", 'Le Netfish', 'Chaud: Baguettine flambée'], 'Pasta Box': ['Sauce thon tomate'], 'Salade': ['La Louisiana']}}, 'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Lannexe': {'Déjeuner': {"L'Annexe": ['PASTA PARTY', 'Poivrons & tomates', 'OU', 'Thon']}}, 'Le 32': {'Déjeuner': {'Carte du jour au 32 - Plats': ['Filet de poulet, sauce crème', 'Fondue de poireaux', 'Garnitures', 'Galette de sarrasin et lentilles', 'Riz pilaf'], 'Entrées': ['Toast au chèvre chaud', 'Soupe de légumes'], 'Desserts': ['Entremet coco ananas', 'Salade de fruits frais']}}, 'Le Cristal Shop Ru Esplanade': {'Déjeuner': {'Plat à emporter Box en verre réutilisable': ['Poisson aux amandes', 'Petits pois', 'Blé safrané', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané', '4,50 € HT/4,95 € TTC', '+ prix de la Box 5,70 € TTC'], 'Burger maison au choix': ['Formule avec frites', 'Burger de boeuf BIO', 'Chicken burger', 'Végé burger'], 'Pizza maison au choix': ['Grecque', 'Tartiflette'], 'Formule étudiante à 1€ tarif boursier / non boursier 3,30 €': ['Formule Be Fit', 'Sandwich, eau plate ou gazeuse, fruit ou yaourt']}}, 'Learning Center': {'Déjeuner': {'Plat du jour': ['Bruschettas marguarita'], 'Sandwichs': ['Le Maraicher', 'Le Parisien', 'Le Berger', 'Bagnat Manon', 'Le Taj Mahal'], 'Pasta box': ['Pasta au saumon'], 'Plat du soir commande Crous&Go': ['Chili con carne/riz pilaf', '(Haché origine ou provenance France)', 'OU', 'Cari de carottes lentilles et quinoa'], 'Salade': ['La Végé bowl']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['Filet de colin pané, sauce béarnaise, carottes bâtonnets, frites incurvées'], 'Plat du jour': ['chaîne perso: Chou farci, jus corsé, blé', 'chaîne étudiants: Steak haché, sauce béarnaise, carottes bâtonnets, frites incurvées'], 'Végétarien': ["Galette de lentille corail à l'indienne, sauce crème champignons, pilaf de quinoa"], 'Extension': ['FERMÉ']}}, 'Resto U De Colmar': {'Déjeuner': {'Menu du jour 3.30€ ou 1€': ['Chili Con Carne/Viande Hachée(Boeuf)', '(Hachée Origine ou Provenance France)', 'Riz Pilaf', 'OU', 'Cari de Carottes Lentilles et Quinoa'], 'Viennoiseries HT': ['En Vente à partir de 8h30 :', 'Croissant Nature à 1,10 euros', 'Pain au Chocolat à 1,20 euros', 'Autre Viennoiserie de 1,10 à 1,40 euros'], 'Les grillades à la carte HT': ["Steak/frites ou légumes à 3,60 euros (l'assiette)", '(Origine France)', "Légumes/Féculents à 2,50 euros (l'assiette)", 'Frites à 2,50 euros (le cornet)', "L'américain à 4,00 euros (le Sandwich)", '(Origine France)'], 'La Pasta box HT': ['Sauce Saumon à 3,60 euros'], 'Les sandwichs HT': ['Le Parisien', 'Le Maraîcher', 'Le Berger', 'Le Bagnat : Le Manon']}}, 'Resto U De Lillberg': {'Déjeuner': {'Menu étudiant - Tarif social': ['Chili con carne/riz pilaf', '(Haché origine ou provenance France)', 'OU', 'Cari de carottes lentilles et quinoa'], 'Brasseur 4,70HT / 5.17TTC euros': ['Jambon grill', '(Origine ou provenance France)', 'Sauce Marchand de Vin', 'Frites', 'Légumes du jour']}}, 'Resto U De Liut Mulhouse': {'Déjeuner': {'Menu étudiant 3.30€ ou 1€': ['Chili con carne/riz pilaf', '(Haché origine ou provenance France)', 'OU', 'Cari de carottes lentilles et quinoa'], 'Sandwichs': ['Le Maraicher', 'Le Parisien', 'Le Berger', 'Bagnat Manon', 'Chaud: Bruschettas margarita'], 'Pasta Box': ['Pasta au saumon'], 'Salades': ['La Végé bowl']}}, 'Resto U Esplanade': {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['2ème étage :', 'Cordon bleu, sauce crème', 'Petits pois', 'Frites', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané', '1er étage :', 'Poisson aux amandes', 'Petits pois', 'Blé safrané', 'Torsades, sauce bolognaise maison', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané'], 'Desserts 1er et 2ème étage': ['Paris-Brest', 'Tarte au citron', 'Compote de pommes aux spéculoos'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Poisson aux amandes', 'Petits pois', 'Blé safrané', 'Galette de quinoa provençale, sauce tomate', 'Petits pois', 'Blé safrané']}, 'Dîner': {'Menus étudiants 2ème étage': ['Fricadelle de boeuf, sauce crème', 'Haricots verts', 'Pommes de terre rôties', 'Gratin de pâtes arrabiata'], 'Desserts 2ème étage': ['Paris-Brest', 'Tarte au citron', 'Compote de pommes aux spéculoos']}}, 'Resto U Gallia': {'Déjeuner': {'MENU ETUDIANT': ['Chipolatas grillées', 'Frites', 'Bâtonnières de légumes'], 'BRASSERIE': ['Filet mignon de porc ', 'Sauce au Munster', 'Frites', 'Bâtonnières de légumes ', 'Pizza Reine', 'Tarte flambée gratinée'], 'VENTE A EMPORTER': ['Formule étudiante ', 'Parisien, eau, fruit', 'Game of cheese', 'Italien', 'Maidele ', 'Panini le Napoli', 'Pizza Reine', 'Tarte flambée gratinée'], 'MENU VEGETARIEN': ['Boulettes de blé Thaï', 'Frites', 'Bâtonnières de légumes']}, 'Dîner': {'MENU ETUDIANT': ['Cordon bleu de dinde', 'Pommes de terre fondantes', 'Légumes'], 'MENU VEGETARIEN': ['Galette végétarienne', 'Pommes de terre fondantes', 'Légumes'], 'ORIGINE ET PROVENANCE DE NOS VIANDES': ["Voir les affiches dans l'entrée"]}}, 'Resto U Illkirch': {'Déjeuner': {'CAFETERIA': ['Petits déjeuners à partir de 7h45', 'Viennoiseries', 'Sandwichs', 'Snacking chaud', 'Desserts maison, pâtisseries américaines', 'Boissons chaudes et froides'], 'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées'], 'SALLE DES ETUDIANTS - PLAT VEGETARIEN': ['Aiguillettes de blé au fromage', 'Sauce Libanaise', 'Poêlée rustique'], 'SALLE DES ETUDIANTS - MENU DU JOUR': ['Émincé de dinde guanajuato', 'Cari de haricots verts', 'Riz'], 'SALLE DES ETUDIANTS - PATES': ['Tortis à la paysanne'], 'SALLE DES ETUDIANTS - BARBECUE': ['Longe de porc fumée', 'ou', 'Merguez', 'Frites'], 'SALLE DES ETUDIANTS - DESSERTS': ['Paris-Brest', 'ou', 'Crème dessert praliné'], 'SALLE DES PERSONNELS - ENTREES': ['Salade césar', 'ou', 'Assiette montagnarde'], 'SALLE DES PERSONNELS - SUGGESTION DU JOUR': ['Steak haché de boeuf', 'Petits pois', 'Frites'], 'SALLE DES PERSONNELS - MENU DU JOUR': ['Émincé de dinde guanajuato', 'Cari de haricots verts', 'Riz'], 'SALLE DES PERSONNELS - PLAT VEGETARIEN': ['Aiguillettes de blé au fromage', 'Sauce Libanaise', 'Poêlée rustique'], 'SALLE DES PERSONNELS - DESSERTS': ['Tarte aux abricots', 'ou', 'Fromage blanc à la myrtille']}}, 'Resto U Paul Appell': {'Déjeuner': {'Pôle végétal': ['Boulettes de blé', 'Salade Thaï'], 'Flam and Co': ['Poutine ', 'Bœuf & cheddar'], 'Plat du jour': ['Beignets de poisson', 'Sauce tartare', 'Petits pois', 'Pommes persillées'], 'Annexe': ['PASTA PARTY', 'Poivrons & tomates', 'OU', 'Thon']}}}, 'mardi 25 mars 2025': {'Cafeteria De La Fonderie': {'Déjeuner': {'menu étudiant tarif social': ['Cuisse de poulet grillée ', '(origine ou provenance France)', 'Pennes', 'Petits pois', 'OU', 'Bouchée edamame', 'Sauce Napolitaine', 'Pennes'], 'Sandwich': ['Le Végéta', 'Le Campagnard', "L'Indien", 'Le Netfish'], 'Box de pâtes': ['Pasta au saumon'], 'Salade': ["L'Alsacienne"]}}, 'Cafeteria Le Pege': {'Déjeuner': {'Petit-déjeuner': ['Café & Viennoiseries', '7h30 -10h30'], 'Plat du jour': ['Penne sauce carbonara ', 'Roquette & parmesan'], 'Végétarien': ['Penne sauce aux champignons', 'Roquette & parmesan']}}, 'Cafeteria Mini R': {'Déjeuner': {'Fermeture': ['Structure fermée du Lundi 24 Mars 2025 au Vendredi 28 Mars 2025']}}, 'Cybercafe Ru Illberg': {'Déjeuner': {'Sandwichs': ['Le Végéta', 'Le Campagnard', "L'Indien", 'Le Netfish', 'Chaud: Panini Bolognaise'], 'Pasta Box': ['Pasta au saumon'], 'Salade': ["L'Alsacienne"]}}, 'Le 32': {'Déjeuner': {'Carte du jour au 32 - Plats': ['Magret, sauce au miel et sésame', 'Brick au chèvre, miel et romarin', 'Garnitures', 'Ecrasé de pommes de terre', 'Romanesco'], 'Entrées': ['Salade césar revisitée', 'Soupe de légumes'], 'Desserts': ['Demi cadre framboises', 'Salade de fruits frais']}}, 'Le Cristal Shop Ru Esplanade': {'Déjeuner': {'Plat à emporter Box en verre réutilisable': ['Croûte de volaille aux champignons', 'Duo de carottes', 'Riz pilaf', 'Curry de pois chiches aux légumes maison', 'Riz pilaf', '4,50 € HT/4,95 € TTC', '+ prix de la Box 5,70 € TTC'], 'Burger maison au choix': ['Formule avec frites', 'Burger de boeuf BIO', 'Chicken burger', 'Végé burger'], 'Pizza maison au choix': ['Reine', '4 saisons'], 'Formule étudiante à 1€ tarif boursier / non boursier 3,30 €': ['Formule Be Fit', 'Sandwich, eau plate ou gazeuse, fruit ou yaourt']}}, 'Learning Center': {'Déjeuner': {'Plat du jour': ['Burger / Burger végé'], 'Sandwichs': ['le Végéta', 'Le Campagnard', "L'Indien", 'Le Netfish', 'Le poulet curry'], 'Pasta box': ['Pasta au saumon'], 'Plat du soir commande Crous&Go': ['Cuisse de poulet grillée ', '(origine ou provenance France)', 'Pennes', 'Petits pois', 'OU', 'Bouchée edamame', 'Sauce Napolitaine', 'Pennes'], 'Salade': ["L'Alsacienne"]}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['Cervelas orloff, poireaux à la crème, pommes de terre sautées'], 'Plat du jour': ['Bouchée à la reine, riz pilaf'], 'Végétarien': ['Cari réunionnais'], 'Extension': ['FERMÉ']}}, 'Resto U De Colmar': {'Déjeuner': {'Menu du jour 3.30€ ou 1€': ['Cuisse de Poulet BBC', '(Origine ou Provenance France)', 'Pennes', 'Petits Pois', 'OU', 'Bouchée Edamame/Carottes', 'Sauce Napolitaine', 'Pennes'], 'Viennoiseries HT': ['En Vente à partir de 8h30 :', 'Croissant Nature à 1,10 euros', 'Pain au Chocolat à 1,20 euros', 'Autre Viennoiserie de 1,10 à 1,40 euros'], 'Les grillades à la carte HT': ["Steak/frites ou légumes à 3,60 euros (l'assiette)", '(Origine France)', "Légumes/Féculents à 2,50 euros (l'assiette)", 'Frites à 2,50 euros (le cornet)', "L'américain à 4,00 euros (le Sandwich)", '(Origine France)'], 'La Pasta box HT': ['Sauce Bolognaise à 3,60 euros'], 'Les sandwichs HT': ['Le Campagnard', 'Le Végéta', "L'Indien", "L'Alsacienne"]}}, 'Resto U De Lillberg': {'Déjeuner': {'Menu étudiant - Tarif social': ['Cuisse de poulet grillée ', '(origine ou provenance France)', 'Pennes', 'Petits pois', 'OU', 'Pennes sauce crème jambon champignon', 'Emmental râpé', 'OU', 'Bouchée edamame', 'Sauce Napolitaine', 'Pennes'], 'Brasseur 4,70HT / 5.17TTC euros': ['Fricassée de porc au munster ', '(origine ou provenance France)', 'Spaetzles', 'Carottes rondelles']}}, 'Resto U De Liut Mulhouse': {'Déjeuner': {'Menu étudiant 3.30€ ou 1€': ['Cuisse de poulet grillée ', '(origine ou provenance France)', 'Pennes', 'Petits pois', 'OU', 'Pennes sauce crème jambon champignon', 'Emmental râpé', 'OU', 'Bouchée edamame', 'Sauce Napolitaine', 'Pennes'], 'Sandwichs': ['Le Végéta', 'Le Campagnard', "L'Indien", 'Le Netfish', 'Chaud: Burger / Burger végé'], 'Pasta Box': ['Pasta au saumon'], 'Salades': ["L'Alsacienne"]}}, 'Resto U Esplanade': {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['2ème étage :', 'Fricadelle de boeuf, sauce marchand de vin', 'Duo de carottes', 'Frites', 'Curry de pois chiches aux légumes maison', 'Riz pilaf', '1er étage :', 'Croûte de volaille aux champignons', 'Duo de carottes', 'Riz pilaf', 'Torsades, sauce carbonara maison', 'Curry de pois chiches aux légumes maison', 'Riz pilaf'], 'Desserts 1er et 2ème étage': ['Crème vanille', 'Donut', 'Eclair au chocolat'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Croûte de volaille aux champignons', 'Duo de carottes', 'Riz pilaf', 'Curry de pois chiches aux légumes maison', 'Riz pilaf']}, 'Dîner': {'Menus étudiants 2ème étage': ['Palette à la diable', 'Petits pois carottes', 'Pommes de terre rôties', 'Aiguillettes de blé, sauce rémoulade', 'Petits pois carottes', 'Pommes de terre rôties'], 'Desserts 2ème étage': ['Crème vanille', 'Donut', 'Eclair au chocolat']}}, 'Resto U Gallia': {'Déjeuner': {'MENU ETUDIANT': ["Boulettes d'agneau à la printanière", "Purée de pommes de terre à l'ancienne", 'Brocolis'], 'BRASSERIE': ['Couscous Royal', 'Pizza Parma', 'Tarte flambée'], 'VENTE A EMPORTER': ['Formule étudiante ', 'Parisien, eau, fruit', 'Game of cheese', 'Italien', 'Maidele', 'Pizza Parma', 'Tarte flambée', 'Américain Merguez'], 'MENU VEGETARIEN': ['Friand au fromage', "Purée de pommes de terre à l'ancienne", 'Brocolis']}, 'Dîner': {'MENU ETUDIANT': ["Tarte à l'oignons et au jambon ", 'Salade verte', 'Pommes rissolées'], 'MENU VEGETARIEN': ['Koshari'], 'ORIGINE ET PROVENANCE DE NOS VIANDES': ["Voir les affiches dans l'entrée"]}}, 'Resto U Illkirch': {'Déjeuner': {'CAFETERIA': ['Petits déjeuners à partir de 7h45', 'Viennoiseries', 'Sandwichs', 'Snacking chaud', 'Desserts maison, pâtisseries américaines', 'Boissons chaudes et froides'], 'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées'], 'SALLE DES ETUDIANTS - PLAT VEGETARIEN': ['Tajine de pois chiches,abricots et amandes', 'Boulgour'], 'SALLE DES ETUDIANTS - MENU DU JOUR': ['Chili con carne', 'Riz'], 'SALLE DES ETUDIANTS - PATES': ['Spaghettis bolognaise'], 'SALLE DES ETUDIANTS - BARBECUE': ["Cuisse de canette à l'orange"], 'SALLE DES ETUDIANTS - DESSERTS': ['Fondant au chocolat', 'ou', 'Compote de pommes'], 'SALLE DES PERSONNELS - ENTREES': ['Salade à la mimolette', 'Ou', 'Salade italienne'], 'SALLE DES PERSONNELS - SUGGESTION DU JOUR': ['Cuisse de poulet à la tournaisienne', 'Choux de Bruxelles', 'Frites'], 'SALLE DES PERSONNELS - MENU DU JOUR': ['Chili con carne', 'Riz'], 'SALLE DES PERSONNELS - PLAT VEGETARIEN': ['Tajine de pois chiches,abricots et amandes', 'Boulgour'], 'SALLE DES PERSONNELS - DESSERTS': ['Tarte aux pommes,cannelle', 'ou', 'Fromage blanc à la rhubarbe']}}}, 'mercredi 26 mars 2025': {'Cafeteria De La Fonderie': {'Déjeuner': {'menu étudiant tarif social': ['Émincé végétal à la Chinoise', 'Riz cantonais', 'OU', 'Samoussas aux légumes', 'Sauce aigre douce au curry ', 'Riz cantonais'], 'Sandwich': ['Le Maraicher', 'Le Parisien', 'Thon mayo', "Le mystère de l'ouest"], 'Box de pâtes': ['Pasta champignons'], 'Salade': ['La Vérone']}}, 'Cafeteria Le Pege': {'Déjeuner': {'Petit-déjeuner': ['Café & Viennoiseries', '7h30 -10h30'], 'Plat du jour': ['Curry de pois chiches Bio & lentilles corail de Plobsheim aux petits légumes', 'Patate douce rôtie', 'Fallafels de Légumineuses'], 'Végétarien': ['Assiette Libanaise, Houmous, Fallafel, Bouchée végétale, quinoa épicée et crudités']}}, 'Cafeteria Mini R': {'Déjeuner': {'Fermeture': ['Structure fermée du Lundi 24 Mars 2025 au Vendredi 28 Mars 2025']}}, 'Cybercafe Ru Illberg': {'Déjeuner': {'Sandwichs': ['Le Maraicher', 'Le Parisien', 'Thon mayo', "Le mystère de l'ouest", 'Chaud:Panini Bolognaise'], 'Pasta Box': ['Pasta champignons'], 'Salade': ['La Vérone']}}, 'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Le 32': {'Déjeuner': {'Carte du jour au 32 - Plats': ['Moussaka végétarienne', 'Salade verte', 'Wok de légumes'], 'Entrées': ['Muffin féta et olives', 'Soupe de légumes'], 'Desserts': ['Tiramisu', 'Salade de fruits frais']}}, 'Le Cristal Shop Ru Esplanade': {'Déjeuner': {'Plat à emporter Box en verre réutilisable': ['JOURNEE VERTE', 'Gratin de légumes', 'Polenta', 'Tajine aux abricots et pois chiches', 'Boulgour aux épices', '4,50 € HT/4,95 € TTC', '+ prix de la Box 5,70 € TTC'], 'Burger maison au choix': ['Formule avec frites', 'Le Bretzel burger', 'Végé burger'], 'Pizza maison au choix': ['4 fromages', 'Légumes du soleil'], 'Formule étudiante à 1€ tarif boursier / non boursier 3,30 €': ['Formule Be Fit', 'Sandwich, eau plate ou gazeuse, fruit ou yaourt']}}, 'Learning Center': {'Déjeuner': {'Plat du jour': ['Tarte Irlandaise'], 'Sandwichs': ['Le Maraicher', 'Le Parisien', 'Thon mayo', "Le Mystère de l'ouest", 'Le Dragon ball'], 'Pasta box': ['Pasta champignons'], 'Plat du soir commande Crous&Go': ['Émincé végétal à la Chinoise', 'Riz cantonais', 'OU', 'Samoussas aux légumes', 'Sauce aigre douce au curry ', 'Riz cantonais'], 'Salade': ['La Vérone']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['Dahl crémeux de pois cassés'], 'Plat du jour': ['Chili sin carne, riz'], 'Végétarien': ['Fajitas de haricots rouges tex mex, salade verte'], 'Extension': ['FERMÉ']}}, 'Resto U De Colmar': {'Déjeuner': {'Menu du jour 3.30€ ou 1€': ['Emincé Végétal à la Chinoise', 'Riz Cantonnais', 'OU', 'Samoussas Aux Légumes', 'Riz Cantonnais'], 'Viennoiseries HT': ['En Vente à partir de 8h30 :', 'Croissant Nature à 1,10 euros', 'Pain au Chocolat à 1,20 euros', 'Autre Viennoiserie de 1,10 à 1,40 euros'], 'Les grillades à la carte HT': ["Steak/frites ou légumes à 3,60 euros (l'assiette)", '(Origine France)', "Légumes/Féculents à 2,50 euros (l'assiette)", 'Frites à 2,50 euros (le cornet)', "L'américain à 4,00 euros (le Sandwich)", '(Origine France)'], 'La Pasta box HT': ['Sauce Champignons à 3,20 euros'], 'Les sandwichs HT': ['Le Parisien', 'Le Maraîcher', 'Le Thon Mayo', "le Mystère de l'Ouest"]}}, 'Resto U De Lillberg': {'Déjeuner': {'Menu étudiant - Tarif social': ['Émincé végétal à la Chinoise', 'Riz cantonais', 'OU', 'Samoussas aux légumes', 'Sauce aigre douce au curry ', 'Riz cantonais'], 'Brasseur 4,70HT / 5.17TTC euros': ['Burger au quinoa à la Provençale', 'Salade verte', 'Potatoes']}}, 'Resto U De Liut Mulhouse': {'Déjeuner': {'Menu étudiant 3.30€ ou 1€': ['Émincé végétal à la Chinoise', 'Riz cantonais', 'OU', 'Samoussas aux légumes', 'Sauce aigre douce au curry ', 'Riz cantonais'], 'Sandwichs': ['Le Maraicher', 'Le Parisien', 'Thon mayo', "Le mystère de l'ouest", 'Chaud:Panini Bolognaise'], 'Pasta Box': ['Pasta champignons'], 'Salades': ['La Vérone']}}, 'Resto U Esplanade': {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['JOURNEE VERTE', '2ème étage :', 'Chili aux lentilles', 'Riz pilaf', 'Tajine aux abricots et pois chiches', 'Boulgour aux épices', '1er étage :', 'Gratin de légumes', 'Polenta', 'Tajine aux abricots et pois chiches', 'Boulgour aux épices'], 'Desserts 1er et 2ème étage': ['Gâteau quinoa pommes', 'Fondant au citron', 'Cocktail de fruits'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Gratin de légumes', 'Polenta', 'Tajine aux abricots et pois chiches', 'Boulgour aux épices']}, 'Dîner': {'Menus étudiants 2ème étage': ['Boulettes de pois chiches BIO, raïta de concombre BIO', 'Haricots verts BIO', 'Boulgour BIO', 'Torsades aux courgettes et pois BIO'], 'Desserts 2ème étage': ['Tarte aux pommes BIO', 'Flan au caramel BIO']}}, 'Resto U Gallia': {'Déjeuner': {'MENU ETUDIANT': ['100% BIO', 'œufs brouillés à la Portugaise', 'Blé', 'Carottes'], 'BRASSERIE': ['Risotto de Petit Épeautre au butternut ', 'Pizza forestière', 'Tarte flambée ail et ciboulette'], 'VENTE A EMPORTER': ['Formule étudiante ', 'Parisien, eau, fruit', 'Game of cheese', 'Italien', 'Maidele', 'Pizza forestière', 'Tarte flambée ail et ciboulette', 'Box de pâtes'], 'MENU VEGETARIEN': ['Emincé végétal à la Chinoise']}, 'Dîner': {'MENU ETUDIANT': ['Tomates farcies', 'Semoule', 'Petits pois'], 'MENU VEGETARIEN': ['Couscous végétarien aux fallafels'], 'ORIGINE ET PROVENANCE DE NOS VIANDES': ["Voir les affiches dans l'entrée"]}}, 'Resto U Illkirch': {'Déjeuner': {'CAFETERIA': ['Petits déjeuners à partir de 7h45', 'Viennoiseries', 'Sandwichs', 'Snacking chaud', 'Desserts maison, pâtisseries américaines', 'Boissons chaudes et froides'], 'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées'], 'SALLE DES ETUDIANTS - PLAT VEGETARIEN': ['Dhal crémeux de pois cassés', 'Pâtes cœur de blé'], 'SALLE DES ETUDIANTS - MENU DU JOUR': ['Chili aux lentilles et haricots rouges', 'Céréales gourmandes'], 'SALLE DES ETUDIANTS - PATES': ['Lasagnes à la provençale'], 'SALLE DES ETUDIANTS - BARBECUE': ['Galette de quinoa à la provençale', 'Sauce au miel'], 'SALLE DES ETUDIANTS - DESSERTS': ['Gâteau de quinoa aux pommes', 'Ou', 'Fromage blanc aux myrtilles'], 'SALLE DES PERSONNELS - ENTREES': ['Salade grecque', 'ou', 'Champignons à la grecque'], 'SALLE DES PERSONNELS - SUGGESTION DU JOUR': ['Mafé épicé à la sauce cacahuètes', 'Semoule'], 'SALLE DES PERSONNELS - MENU DU JOUR': ['Lasagnes à la provençale'], 'SALLE DES PERSONNELS - PLAT VEGETARIEN': ['Chili aux lentilles et haricots rouges', 'Céréales gourmandes'], 'SALLE DES PERSONNELS - DESSERTS': ['Tarte aux fruits de bois', 'ou', 'Mousse au citron']}}}, 'jeudi 27 mars 2025': {'Cafeteria De La Fonderie': {'Déjeuner': {'menu étudiant tarif social': ['Chausson à la Bolognaise', 'Frites', 'Haricots verts', 'OU', 'Msir wot', 'Frites'], 'Sandwich': ['Le Végéta', 'Le Campagnard', 'Le Game of cheese', 'Wrap chicken roll'], 'Box de pâtes': ['Pasta champignons'], 'Salade': ['La New César']}}, 'Cafeteria Le Pege': {'Déjeuner': {'Petit-déjeuner': ['Café & Viennoiseries', '7h30 -10h30'], 'Plat du jour': ['Sauté de porc à l’aigre douce ', 'Légumes à l’asiatique', 'Riz cantonais'], 'Végétarien': ['Samossas de légumes', 'Légumes à l’asiatique', 'Riz cantonais']}}, 'Cafeteria Mini R': {'Déjeuner': {'Fermeture': ['Structure fermée du Lundi 24 Mars 2025 au Vendredi 28 Mars 2025']}}, 'Cybercafe Ru Illberg': {'Déjeuner': {'Sandwichs': ['Le Végéta', 'Le Campagnard', 'Le Game of cheese', 'Wrap chicken roll', 'Chaud: Burger / Burger végé'], 'Pasta Box': ['Pasta champignons'], 'Salade': ['La New César']}}, 'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Le 32': {'Déjeuner': {'Carte du jour au 32 - Plats': ['Paleron de boeuf', 'Risotto vert', 'Garnitures', 'Pommes de terre charlottes au four', 'Poêlée de carottes et céleri'], 'Entrées': ['Wrap végétal', 'Soupe de légumes'], 'Desserts': ['Dôme crème brûlée', 'Salade de fruits frais']}}, 'Le Cristal Shop Ru Esplanade': {'Déjeuner': {'Plat à emporter Box en verre réutilisable': ['Pilons de poulet à la citronnelle', 'Nouilles chinoises', 'Wok de légumes', 'Samoussa aux légumes, sauce au miel', 'Nouilles chinoises', 'Wok de légumes', '4,50 € HT/4,95 € TTC', '+ prix de la Box 5,70 € TTC'], 'Burger maison au choix': ['Formule avec frites', 'Burger de boeuf BIO', 'Chicken burger', 'Végé burger'], 'Pizza maison au choix': ['Poulet', 'Mozzarella'], 'Formule étudiante à 1€ tarif boursier / non boursier 3,30 €': ['Formule Be Fit', 'Sandwich, eau plate ou gazeuse, fruit ou yaourt']}}, 'Learning Center': {'Déjeuner': {'Plat du jour': ['Burger / Burger végé'], 'Sandwichs': ['Le Végéta', 'Le Campagnard', 'Le Game of cheese', 'Wrap chicken roll', "L'Auvergnat"], 'Pasta box': ['Pasta champignons'], 'Plat du soir commande Crous&Go': ['Chausson à la Bolognaise', 'Frites', 'Haricots verts', 'OU', 'Msir wot', 'Frites'], 'Salade': ['La New César']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['chaîne perso: Gombo traditionnel louisianais et son riz au raisin', 'chaîne étudiants: Rougail saucisse et riz'], 'Plat du jour': ['Poisson à la bordelaise et légumes vapeur'], 'Végétarien': ['Curry de patates douces'], 'Extension': ['Tacos au poulet']}}, 'Resto U De Colmar': {'Déjeuner': {'Menu du jour 3.30€ ou 1€': ['Chausson à la Bolognaise de Dinde', 'Frites', 'Haricots Verts', 'OU', 'Misir Wot(Mijoté Ethiopien)', 'Frites'], 'Viennoiseries HT': ['En Vente à partir de 8h30 :', 'Croissant Nature à 1,10 euros', 'Pain au Chocolat à 1,20 euros', 'Autre Viennoiserie de 1,10 à 1,40 euros'], 'Les grillades à la carte HT': ["Steak/frites ou légumes à 3,60 euros (l'assiette)", '(Origine France)', "Légumes/Féculents à 2,50 euros (l'assiette)", 'Frites à 2,50 euros (le cornet)', "L'américain à 4,00 euros (le Sandwich)", '(Origine France)'], 'La Pasta box HT': ['Sauce Thon à la Tomate à 3,20 euros'], 'Les sandwichs HT': ['Le Campagnard', 'Le Végéta', 'Le Game Of Cheese', 'Le Wrap : Le Chicke N Roll']}}, 'Resto U De Lillberg': {'Déjeuner': {'Menu étudiant - Tarif social': ['Chausson à la Bolognaise', 'Frites', 'Haricots verts', 'OU', 'Msir wot', 'Frites'], 'Brasseur 4,70HT / 5.17TTC euros': ['Couscous ', '(Boulettes, merguez, pilon de poulet)']}}, 'Resto U De Liut Mulhouse': {'Déjeuner': {'Menu étudiant 3.30€ ou 1€': ['Chausson à la Bolognaise', 'Frites', 'Haricots verts', 'OU', 'Msir wot', 'Frites'], 'Sandwichs': ['Le Végéta', 'Le Campagnard', 'Le Game of cheese', 'Wrap chicken roll', 'Chaud: Burger / Burger végé'], 'Pasta Box': ['Pasta champignons'], 'Salades': ['La New César']}}, 'Resto U Esplanade': {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['2ème étage:', 'Poutine', 'Frites', 'Samoussa aux légumes, sauce au miel', 'Nouilles chinoises', 'Wok de légumes', '1er étage :', 'Pilons de poulet à la citronnelle', 'Nouilles chinoises', 'Wok de légumes', 'Torsades, sauce aux 3 fromages maison', 'Samoussa aux légumes, sauce au miel', 'Nouilles chinoises', 'Wok de légumes'], 'Desserts 1er et 2ème étage': ['Millefeuille vanille', 'Tarte aux pommes', 'Fromage blanc aux griottes'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Pilons de poulet à la citronnelle', 'Nouilles chinoises', 'Wok de légumes', 'Samoussa aux légumes, sauce au miel', 'Nouilles chinoises', 'Wok de légumes']}, 'Dîner': {'Menus étudiants 2ème étage': ['Chili con carné maison', 'Fajitas de haricots rouges tex mex maison', 'Poêlée mexicaine'], 'Desserts 2ème étage': ['Millefeuille vanille', 'Tarte aux pommes', 'Fromage blanc aux griottes']}}, 'Resto U Gallia': {'Déjeuner': {'MENU ETUDIANT': ['Émince de porc au Pistou'], 'BRASSERIE': ["Pizza Napolitaine 'MAISON'", 'Margarita ou Mortazza'], 'VENTE A EMPORTER': ['Formule étudiante ', 'Parisien, eau, fruit', 'Game of cheese', 'Italien', 'Maidele', 'Pizza Margarita', 'Tarte flambée', 'Hamburger / frites'], 'MENU VEGETARIEN': ["Menu 100% local 'Gaines d'Alsace'", 'Chili de lentilles ', 'Pilaf de quinoa']}, 'Dîner': {'MENU ETUDIANT': ['Escalope Viennoise', 'Sauce tomate basilic', 'Julienne de légumes', 'Pâtes torsade'], 'MENU VEGETARIEN': ['Pâtes torsade', 'Sauce aux 3 fromages'], 'ORIGINE ET PROVENANCE DE NOS VIANDES': ["Voir affiche dans l'entrée"]}}, 'Resto U Illkirch': {'Déjeuner': {'CAFETERIA': ['Petits déjeuners à partir de 7h45', 'Viennoiseries', 'Sandwichs', 'Snacking chaud', 'Desserts maison, pâtisseries américaines', 'Boissons chaudes et froides'], 'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées'], 'SALLE DES ETUDIANTS - PLAT VEGETARIEN': ['Cari de carottes aux deux lentilles', 'Quinoa'], 'SALLE DES ETUDIANTS - MENU DU JOUR': ['Cordon bleu/viennoise', 'Duo de haricots', 'Purée'], 'SALLE DES ETUDIANTS - PATES': ['Gratin de coudes à la savoyarde'], 'SALLE DES ETUDIANTS - BARBECUE': ['Chipolatas', 'ou', 'Fricadelles sauce bordelaise'], 'SALLE DES ETUDIANTS - DESSERTS': ['Crème dessert vanille', 'ou', 'Fondant citron et pois chiches'], 'SALLE DES PERSONNELS - ENTREES': ["Salade d'avocat au thon", 'ou', 'Salade de cervelas-gruyère'], 'SALLE DES PERSONNELS - SUGGESTION DU JOUR': ['Sauté de poulet à la crème de tomates confites', 'Courgettes poêlées', 'Röstis'], 'SALLE DES PERSONNELS - MENU DU JOUR': ['Gratin de coudes à la savoyarde'], 'SALLE DES PERSONNELS - PLAT VEGETARIEN': ['Cari de carottes aux deux lentilles', 'Quinoa'], 'SALLE DES PERSONNELS - DESSERTS': ['Tarte au citron meringuée', 'ou', 'Crêpe miel amandes']}}}, 'vendredi 28 mars 2025': {'Cafeteria De La Fonderie': {'Déjeuner': {'menu étudiant tarif social': ['Filet de colin pané', 'Tagliatelles', 'Courgettes à la Provençale', 'OU', 'Dahl crémeux de lentilles blondes', 'Tagliatelles'], 'Sandwich': ['Le Maraicher', 'Le Parisien', "L'Italien", 'Le Maidele'], 'Box de pâtes': ['Pasta pesto'], 'Salade': ['La Louisiana']}}, 'Cafeteria Le Pege': {'Déjeuner': {'Petit-déjeuner': ['Café & Viennoiseries', '7h30 -10h30'], 'Plat du jour': ['Limande meunière ', 'Duo de carottes & panais', 'Frites', 'ou', 'Petits salés aux lentilles bio de Plobsheim', 'Saucisse fumée'], 'Végétarien': ['Galette potiron boulgour', 'Duo de carottes & panais', 'Frites']}}, 'Cafeteria Mini R': {'Déjeuner': {'Fermeture': ['Structure fermée du Lundi 24 Mars 2025 au Vendredi 28 Mars 2025']}}, 'Cybercafe Ru Illberg': {'Déjeuner': {'Sandwichs': ['Le Maraicher', 'Le Parisien', "L'Italien", 'Le Maidele', 'Chaud: Panini Le Vénézia'], 'Pasta Box': ['Pasta pesto'], 'Salade': ['La Louisiana']}}, 'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Le 32': {'Déjeuner': {'Carte du jour au 32 - Plats': ['Filet de sandre, beurre blanc', 'Polenta au fromage et légumes', 'Garnitures', 'Pépinettes aux herbes', 'Epinards à la crème'], 'Entrées': ['Brick au chèvre, miel et romarin', 'Soupe de légumes'], 'Desserts': ['Charlottine aux fruits rouges', 'Salade de fruits frais']}}, 'Le Cristal Shop Ru Esplanade': {'Déjeuner': {'Plat à emporter Box en verre réutilisable': ['Echine de porc, sauce à la bière', 'Haricots verts', 'Purée de pommes de terre', 'Quiche aux pommes de terre et épinards', 'Haricots verts', 'Torsades', '4,50 € HT/4,95 € TTC', '+ prix de la Box 5,70 € TTC'], 'Burger maison au choix': ['Formule avec frites', 'Burger de boeuf BIO', 'Chicken burger', 'Végé burger'], 'Pizza maison au choix': ['Thon', 'Chèvre'], 'Formule étudiante à 1€ tarif boursier / non boursier 3,30 €': ['Formule Be Fit', 'Sandwich, eau plate ou gazeuse, fruit ou yaourt']}}, 'Learning Center': {'Déjeuner': {'Plat du jour': ['Panini Le Vénézia'], 'Sandwichs': ['Le Maraicher', 'Le Parisien', "L'Italien", 'Le Maidele', 'Le dolce vita'], 'Pasta box': ['Pasta pesto'], 'Plat du soir commande Crous&Go': ['Filet de colin pané', 'Tagliatelles', 'Courgettes à la Provençale', 'OU', 'Dahl crémeux de lentilles blondes', 'Tagliatelles'], 'Salade': ['La Louisiana']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['Fricadelle de bœuf, sauce marchand de vin, chou romanesco, frites'], 'Plat du jour': ['chaîne perso: Tagliatelles aux gésiers confits', 'chaîne étudiants: Menu du jour'], 'Végétarien': ['Boulettes de blé thaï, risotto aux légumes'], 'Extension': ['Lasagnes bolognaise']}}, 'Resto U De Colmar': {'Déjeuner': {'Menu du jour 3.30€ ou 1€': ['Filet de Colin Pané', 'Tagliatelles', 'Courgettes à la Provençale', 'OU', 'Dahl Crémeux de Pois Cassés', 'Tagliatelles'], 'Viennoiseries HT': ['En Vente à partir de 8h30 :', 'Croissant Nature à 1,10 euros', 'Pain au Chocolat à 1,20 euros', 'Autre Viennoiserie de 1,10 à 1,40 euros'], 'Les grillades à la carte HT': ["Steak/frites ou légumes à 3,60 euros (l'assiette)", '(Origine France)', "Légumes/Féculents à 2,50 euros (l'assiette)", 'Frites à 2,50 euros (le cornet)', "L'américain à 4,00 euros (le Sandwich)", '(Origine France)'], 'La Pasta box HT': ['Sauce Pesto à 3,20 euros'], 'Les sandwichs HT': ['Le Parisien', 'Le Maraîcher', "L'Italien", 'La Mauricette : Le Maidele', 'Le Panini : Le Venezia']}}, 'Resto U De Lillberg': {'Déjeuner': {'Menu étudiant - Tarif social': ['Filet de colin pané', 'Tagliatelles', 'Courgettes à la Provençale', 'OU', 'Spaghettis à la Bolognaise ', '(haché origine ou provenance France)', 'OU', 'Dahl crémeux de lentilles blondes', 'Tagliatelles'], 'Brasseur 4,70HT / 5.17TTC euros': ['Lasagnes à la Bolognaise ', '(haché origine ou provenance France)', 'Salade verte']}}, 'Resto U De Liut Mulhouse': {'Déjeuner': {'Menu étudiant 3.30€ ou 1€': ['Filet de colin pané', 'Tagliatelles', 'Courgettes à la Provençale', 'OU', 'Spaghettis à la Bolognaise ', '(haché origine ou provenance France)', 'OU', 'Dahl crémeux de lentilles blondes', 'Tagliatelles'], 'Sandwichs': ['Le Maraicher', 'Le Parisien', "L'Italien", 'Le Maidele', 'Chaud: Panini Le Vénézia'], 'Pasta Box': ['Pasta pesto'], 'Salades': ['La Louisiana']}}, 'Resto U Esplanade': {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['2ème étage :', 'Merguez, sauce tomate', 'Zaalouk de chou-fleur', 'Frites', 'Quiche aux pommes de terre et épinards', 'Haricots verts', 'Torsades', '1er étage :', 'Echine de porc, sauce à la bière', 'Haricots verts', 'Purée de pommes de terre', 'Torsades, sauce aux 2 saumon maison', 'Quiche aux pommes de terre et épinards', 'Haricots verts', 'Torsades'], 'Desserts 1er et 2ème étage': ['Beignet aux framboises', 'Eclair au café', 'Tiramisu'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Echine de porc, sauce à la bière', 'Haricots verts', 'Purée de pommes de terre', 'Quiche aux pommes de terre et épinards', 'Haricots verts', 'Torsades']}, 'Dîner': {'Menus étudiants 2ème étage': ['Cordon bleu, sauce tomate', 'Carottes au céleri branche', 'Gratin dauphinois'], 'Desserts 2ème étage': ['Beignet aux framboises', 'Eclair au café', 'Tiramisu']}}, 'Resto U Gallia': {'Déjeuner': {'MENU ETUDIANT': ['Grignottes de poulet', 'Sauce aux herbes', 'Poêlée Printanière'], 'BRASSERIE': ["Tourte au bœuf 'MAISON' ", 'Salade Auvergnate', 'Pizza', 'Tarte flambée'], 'VENTE A EMPORTER': ['Formule étudiante ', 'Parisien, eau, fruit', 'Game of cheese', 'Italien', 'Maidele', 'Pizza', 'Tarte flambée', 'Hot-dog'], 'MENU VEGETARIEN': ['Galette au sarrasin et lentilles', 'Poêlée Printanière']}, 'Dîner': {'MENU ETUDIANT': ['Palette à la diable', 'Riz pilaf', 'Légumes'], 'MENU VEGETARIEN': ['Galette végétarienne'], 'ORIGINE ET PROVENANCE DE NOS VIANDES': ["Voir affiche dans l'entrée"]}}, 'Resto U Illkirch': {'Déjeuner': {'CAFETERIA': ['Petits déjeuners à partir de 7h45', 'Viennoiseries', 'Sandwichs', 'Snacking chaud', 'Desserts maison, pâtisseries américaines', 'Boissons chaudes et froides'], 'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées'], 'SALLE DES ETUDIANTS - PLAT VEGETARIEN': ['Curry de boulettes aux légumes', 'Petit épeautre'], 'SALLE DES ETUDIANTS - MENU DU JOUR': ['Émincé de porc aux cacahuètes', 'Riz cantonais'], 'SALLE DES ETUDIANTS - PATES': ['Spaetzle à la choucroute et aux lardons'], 'SALLE DES ETUDIANTS - BARBECUE': ['Galopin de veau sauce champignons'], 'SALLE DES ETUDIANTS - DESSERTS': ['Pêche sur lit de crème pâtissière'], 'SALLE DES PERSONNELS - ENTREES': ['Pâté en croute-crudités', 'ou', 'Oeuf mollet aux lardons'], 'SALLE DES PERSONNELS - SUGGESTION DU JOUR': ['Fish and chips sauce rémoulade', "Carottes à l'oriental", 'Pommes de terre au four'], 'SALLE DES PERSONNELS - MENU DU JOUR': ['Émincé de porc aux cacahuètes', 'Riz cantonais'], 'SALLE DES PERSONNELS - PLAT VEGETARIEN': ['Curry de boulettes aux légumes', 'Petit épeautre'], 'SALLE DES PERSONNELS - DESSERTS': ["Tarte à l'ananas", 'ou', 'Mousse cappucino']}}}, 'lundi 31 mars 2025': {'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['Escalope viennoise, sauce tomate, choux fleurs, pommes rissolées'], 'Plat du jour': ['Crêpe au jambon et fromage, salade champêtre'], 'Végétarien': ['Pâtes aux fromages'], 'Extension': ['Pasta party']}}, 'Resto U Illkirch': {'Déjeuner': {'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées']}}}, 'mercredi 2 avril 2025': {'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['Galette orge chèvre miel, gratin de légumes'], 'Plat du jour': ['Croissant au fromage, salade auvergnate'], 'Végétarien': ['Kefta coriandre menthe, sauce tzatziki, semoule'], 'Extension': ['FERMÉ']}}, 'Resto U Illkirch': {'Déjeuner': {'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées']}}}, 'jeudi 3 avril 2025': {'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['Currywurst, petits pois à la française, frites'], 'Plat du jour': ['Cari de poisson au combava, riz au safran'], 'Végétarien': ['Pita à la galette de soja tomate basilic, sauce aux herbes, salade composée'], 'Extension': ['Nuggets de poulet, brocolis, gratin de pommes de terre']}}, 'Resto U Illkirch': {'Déjeuner': {'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées']}}}, 'vendredi 4 avril 2025': {'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['chaîne perso: Bacon burger, salade verte, potatoes', 'chaîne étudiants: Grillade du jour'], 'Plat du jour': ['Quiche lorraine, légumes'], 'Végétarien': ['Boulettes de pois chiche, sauce au fromage blanc, dahl de lentilles aux épices'], 'Extension': ['Raviolis à la sauce tomate']}}, 'Resto U Illkirch': {'Déjeuner': {'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées']}}}, 'mardi 1 avril 2025': {'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['chaîne perso: Filet de loup, sauce à la vanille, haricots verts, pomme duchesse', 'chaîne étudiants: Filet de colin , sauce à la vanille, haricots verts, pomme duchesse'], 'Plat du jour': ['Emincé de dinde à la crème, riz aux petits légumes'], 'Végétarien': ['Tchoutchouka aux œufs, boulgour'], 'Extension': ['Doner à garnir']}}, 'Resto U Illkirch': {'Déjeuner': {'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées']}}}})
all_dates_all_menus['vendredi 28 mars 2025']['Resto U Esplanade']['Déjeuner']
{'Menus étudiants 1er et 2ème étage': ['2ème étage :', 'Merguez, sauce tomate', 'Zaalouk de chou-fleur', 'Frites', 'Quiche aux pommes de terre et épinards', 'Haricots verts', 'Torsades', '1er étage :', 'Echine de porc, sauce à la bière', 'Haricots verts', 'Purée de pommes de terre', 'Torsades, sauce aux 2 saumon maison', 'Quiche aux pommes de terre et épinards', 'Haricots verts', 'Torsades'], 'Desserts 1er et 2ème étage': ['Beignet aux framboises', 'Eclair au café', 'Tiramisu'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Echine de porc, sauce à la bière', 'Haricots verts', 'Purée de pommes de terre', 'Quiche aux pommes de terre et épinards', 'Haricots verts', 'Torsades']}
def show_item(list_):
i = 1
for item in list_:
print('%s : %s'%(str(i),item))
i+=1
input()
quit = 'N'
change_rest = 'Y'
while quit=='N':
dates = list(all_dates_all_menus.keys())
show_item(dates)
date_choosed = int(input('Select the date (type the number aside)'))
restaurants = list(all_dates_all_menus[dates[date_choosed-1]].keys())
while change_rest == 'Y':
print('---------------------------\n\n')
show_item(restaurants)
rest_choosed = int(input('Select the restaurant (type the number aside)'))
meal_keys = list(all_dates_all_menus[dates[date_choosed-1]][restaurants[rest_choosed-1]].keys())
show_item(meal_keys)
meal_choosed = int(input('Select the meal (type the number aside)'))
menu = all_dates_all_menus[dates[date_choosed-1]][restaurants[rest_choosed-1]][meal_keys[meal_choosed-1]]
for meal in menu:
print('''%s :\n\t\t%s'''%(meal,
' \n\t\t'.join(menu[meal])))
change_rest = input('Do you want to select another restaurant ? (Y/N)')
quit = input('Do you want to quit ? (Y/N)')
if quit == 'N':
change_rest = 'Y'
1 : lundi 24 mars 2025 2 : mardi 25 mars 2025 3 : mercredi 26 mars 2025 4 : jeudi 27 mars 2025 5 : vendredi 28 mars 2025 6 : lundi 31 mars 2025 7 : mercredi 2 avril 2025 8 : jeudi 3 avril 2025 9 : vendredi 4 avril 2025 10 : mardi 1 avril 2025 Select the date (type the number aside)1 --------------------------- 1 : Cafeteria De La Fonderie 2 : Cafeteria Le Pege 3 : Cafeteria Mini R 4 : Cybercafe Ru Illberg 5 : Kiosque Ru Esplanade 6 : Lannexe 7 : Le 32 8 : Le Cristal Shop Ru Esplanade 9 : Learning Center 10 : Resto U Cronenbourg 11 : Resto U De Colmar 12 : Resto U De Lillberg 13 : Resto U De Liut Mulhouse 14 : Resto U Esplanade 15 : Resto U Gallia 16 : Resto U Illkirch 17 : Resto U Paul Appell Select the restaurant (type the number aside)2 1 : Déjeuner Select the meal (type the number aside)1 Petit-déjeuner : Café & Viennoiseries 7h30 -10h30 Plat du jour : Émincé de dinde à l’Indienne Brunoise de légumes Quinoa de Plobsheim ou frites Végétarien : Biryani & bouchées végétales Brunoise de légumes Quinoa de Plobsheim ou frites Do you want to select another restaurant ? (Y/N)N Do you want to quit ? (Y/N)Y
# To scrap
from bs4 import BeautifulSoup
import urllib3
# To handle text manipulation
import re
# to handle time
import time
# to use defaultdict object
from collections import defaultdict
# To have a nice graphical bar that shows where we are in a process
import tqdm
def get_page(urlpage):
"""
Return the html of a given webpage as a string
"""
# Get page in html
time.sleep(7 + random.uniform(0,8))
res = requests.get(urlpage, headers = user_agent)
soup = BeautifulSoup(res.text, 'html.parser')
return str(soup)
def get_all_links():
"""
Get all restaurants links and create a dict of link with ru_names as keys
"""
# Webpage from which we extract all links
urlpage = 'https://www.crous-strasbourg.fr/se-restaurer/ou-manger/'
# Get html text from the page
soup_ = get_page(urlpage)
# Extract each link on the webpage
links = re.findall('href="(.*?)">',soup_)
# Create an empty dict
names_links = {}
# Iterate over each link
for link in links:
# Check if the "restaurant" is in the url
if '/restaurant/' in link:
# Extract the nauner']me of the restaurant
name = re.findall('restaurant/(.*)/',link)[0]
name = re.sub('-',' ',name)
name = re.sub(' 2','',name)
name = name.title()
# Update the dict
names_links.update({name : link})
return names_links
links = get_all_links()
links
{'Cafeteria De La Fac De Droit': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-de-la-fac-de-droit-2/', 'Cafeteria De La Fonderie': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-de-la-fonderie-2/', 'Cafeteria Illkirch': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-illkirch-2/', 'Cafeteria La Misha': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-la-misha-2/', 'Cafeteria Le Cardo': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-le-cardo-2/', 'Cafeteria Le Patio': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-le-patio-2/', 'Cafeteria Le Pege': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-le-pege-2/', 'Cafeteria Mini R': 'https://www.crous-strasbourg.fr/restaurant/cafeteria-mini-r-2/', 'Cybercafe Ru Illberg': 'https://www.crous-strasbourg.fr/restaurant/cybercafe-ru-illberg-2/', 'Fec': 'https://www.crous-strasbourg.fr/restaurant/fec/', 'Kiosque Ru Esplanade': 'https://www.crous-strasbourg.fr/restaurant/kiosque-ru-esplanade/', 'Lannexe': 'https://www.crous-strasbourg.fr/restaurant/lannexe-2/', 'Le 32': 'https://www.crous-strasbourg.fr/restaurant/le-32-2/', 'Le Cristal Shop Ru Esplanade': 'https://www.crous-strasbourg.fr/restaurant/le-cristal-shop-ru-esplanade-2/', 'Le Stift': 'https://www.crous-strasbourg.fr/restaurant/le-stift/', 'Learning Center': 'https://www.crous-strasbourg.fr/restaurant/learning-center-2/', 'Ort Laure Weil': 'https://www.crous-strasbourg.fr/restaurant/ort-laure-weil/', 'Restaurant Du Centre Hospitalier Derstein': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-centre-hospitalier-derstein/', 'Restaurant Du Centre Hospitalier Sainte Catherine': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-centre-hospitalier-sainte-catherine/', 'Restaurant Du Lycee Blaise Pascal': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-blaise-pascal/', 'Restaurant Du Lycee Dr Eugene Koeberle': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-dr-eugene-koeberle/', 'Restaurant Du Lycee Jean Mermoz': 'https://www.crous-strasbourg.fr/restaurant/restaurant-du-lycee-jean-mermoz/', 'Resto U Cronenbourg': 'https://www.crous-strasbourg.fr/restaurant/resto-u-cronenbourg-2/', 'Resto U De Colmar': 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-colmar-2/', 'Resto U De Lillberg': 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-lillberg-2/', 'Resto U De Liut Mulhouse': 'https://www.crous-strasbourg.fr/restaurant/resto-u-de-liut-mulhouse-2/', 'Resto U Esplanade': 'https://www.crous-strasbourg.fr/restaurant/resto-u-esplanade-2/', 'Resto U Gallia': 'https://www.crous-strasbourg.fr/restaurant/resto-u-gallia-2/', 'Resto U Illkirch': 'https://www.crous-strasbourg.fr/restaurant/resto-u-illkirch-2/', 'Resto U Paul Appell': 'https://www.crous-strasbourg.fr/restaurant/resto-u-paul-appell/'}
def get_details(meal_foodie):
"""
Get meal content and pole name
"""
# Separate name and food
pole, foodie = meal_foodie.split('<ul>')
# Extract meals keeping everything between <li> and </li>
details = re.findall('<li>(.*?)</li>',
foodie)
# Clean name
pole = re.search('<li>(.+)',pole).group(1)
return pole, details
def get_pole_menu(meal_foodies):
"""
Iterate over each pole and store the information about the meal
"""
pole_menu = dict()
# Iterate over each possble choice
for meal_foodie in meal_foodies:
pole, details = get_details(meal_foodie)
clean_details = [detail for detail in details if detail != '-']
# Update the dictionary
if 'Origine' not in pole:
pole_menu.update({pole:clean_details})
return pole_menu
def clean_meals(content):
"""
Separate lunch and dinner, remove first element as it does not contains information about food
"""
meals = str(content).split('<div class="meal">')
meals = meals[1:]
return meals
def get_date(content):
"""
Get date
"""
date = re.findall('<time class="menu_date_title">Menu du (.*?)</time>',str(content))[0]
return date
def get_meal_type(meal):
"""
Lunch or dinner?
"""
meal_type = re.findall('<div class="meal_title">(.*?)</div>',meal)[0]
return meal_type
def get_all_meals_for_given_date(content):
"""
Put all the functions together, return date and all meal for a given restaurant at a gevien date
"""
date = get_date(content)
meals = clean_meals(content)
all_meals = dict()
# Iterate over each meal
for meal in meals:
meal_foodies = meal.split('</ul></li>')[:-1]
meal_type = get_meal_type(meal)
pole_menu = get_pole_menu(meal_foodies)
# Store the resulte
all_meals.update({meal_type:pole_menu})
return date ,all_meals
all_dates_all_menus = defaultdict(dict)
for name in tqdm.tqdm(links):
# Get html text from the link
soup = get_page(links[name])
# Return elements that matched the html class in a list
contents = re.findall('<div class="menu">.*?\n</div>\n</div>',str(soup), re.DOTALL)
for content in contents:
date ,all_meals = get_all_meals_for_given_date(content)
all_dates_all_menus[date].update({name:all_meals})
all_dates_all_menus
100%|██████████| 30/30 [10:05<00:00, 20.17s/it]
defaultdict(dict, {'lundi 24 mars 2025': {'Cafeteria De La Fonderie': {'Déjeuner': {'menu étudiant tarif social': ['Chili con carne/riz pilaf', '(Haché origine ou provenance France)', 'OU', 'Cari de carottes lentilles et quinoa'], 'Sandwich': ['Le Maraicher', 'Le Parisien', 'Le Berger', 'Bagnat Manon', 'Chaud: Bruschettas margarita'], 'Box de pâtes': ['Pasta au saumon'], 'Salade': ['Végé bowl']}}, 'Cafeteria Le Pege': {'Déjeuner': {'Petit-déjeuner': ['Café & Viennoiseries', '7h30 -10h30'], 'Plat du jour': ['Émincé de dinde à l’Indienne ', 'Brunoise de légumes', 'Quinoa de Plobsheim ou frites'], 'Végétarien': ['Biryani & bouchées végétales', 'Brunoise de légumes', 'Quinoa de Plobsheim ou frites']}}, 'Cafeteria Mini R': {'Déjeuner': {'Fermeture': ['Structure fermée du Lundi 24 Mars 2025 au Vendredi 28 Mars 2025']}}, 'Cybercafe Ru Illberg': {'Déjeuner': {'Sandwichs': ['Le Végéta', 'Le Parisien', "L'Indien", 'Le Netfish', 'Chaud: Baguettine flambée'], 'Pasta Box': ['Sauce thon tomate'], 'Salade': ['La Louisiana']}}, 'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Lannexe': {'Déjeuner': {"L'Annexe": ['PASTA PARTY', 'Poivrons & tomates', 'OU', 'Thon']}}, 'Le 32': {'Déjeuner': {'Carte du jour au 32 - Plats': ['Suprême de volaille', 'Boulgour', 'Poêlée de carottes et poireaux à la crème', 'Lasagnes végétariennes', 'Salade verte'], 'Entrées': ['Brick chèvre et miel', 'Soupe de légumes'], 'Desserts': ['Dôme chocolat et mandarine', 'Salade de fruits frais']}}, 'Le Cristal Shop Ru Esplanade': {'Déjeuner': {'Plat à emporter Box en verre réutilisable': ['Poisson aux amandes, sauce tomate maison', 'Petits pois', 'Blé safrané', 'Galette de quinoa provençale, sauce tomate maison', 'Petits pois', 'Blé safrané', '4,50 € HT/4,95 € TTC', '+ prix de la Box 5,70 € TTC'], 'Burger maison au choix': ['Formule avec frites', 'Burger de boeuf BIO', 'Chicken burger', 'Végé burger'], 'Pizza maison au choix': ['Grecque', 'Tartiflette'], 'Formule étudiante à 1€ tarif boursier / non boursier 3,30 €': ['Formule Be Fit', 'Sandwich, eau plate ou gazeuse, fruit ou yaourt']}}, 'Learning Center': {'Déjeuner': {'Plat du jour': ['Bruschettas marguarita'], 'Sandwichs': ['Le Maraicher', 'Le Parisien', 'Le Berger', 'Bagnat Manon', 'Le Taj Mahal'], 'Pasta box': ['Pasta au saumon'], 'Plat du soir commande Crous&Go': ['Chili con carne/riz pilaf', '(Haché origine ou provenance France)', 'OU', 'Cari de carottes lentilles et quinoa'], 'Salade': ['La Végé bowl']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['Filet de colin pané, sauce béarnaise, carottes bâtonnets, frites incurvées'], 'Plat du jour': ['chaîne perso: Chou farci, jus corsé, blé', 'chaîne étudiants: Steak haché, sauce béarnaise, carottes bâtonnets, frites incurvées'], 'Végétarien': ["Galette de lentille corail à l'indienne, sauce crème champignons, pilaf de quinoa"], 'Extension': ['FERMÉ']}}, 'Resto U De Colmar': {'Déjeuner': {'Menu du jour 3.30€ ou 1€': ['Chili Con Carne/Viande Hachée (Bœuf)', '(Hachée Origine ou Provenance France)', 'Riz Pilaf', 'OU', 'Cari de Carottes Lentilles et Quinoa'], 'Viennoiseries HT': ['En Vente à partir de 8h30 :', 'Croissant Nature à 1,10 euros', 'Pain au Chocolat à 1,20 euros', 'Autre Viennoiserie de 1,10 à 1,40 euros'], 'Les grillades à la carte HT': ["Steak/frites ou légumes à 3,60 euros (l'assiette)", '(Origine France)', "Légumes/Féculents à 2,50 euros (l'assiette)", 'Frites à 2,50 euros (le cornet)', "L'américain à 4,00 euros (le Sandwich)", '(Origine France)'], 'La Pasta box HT': ['Sauce Saumon à 3,60 euros'], 'Les sandwichs HT': ['Le Parisien', 'Le Maraîcher', 'Le Berger', 'Le Bagnat : Le Manon']}}, 'Resto U De Lillberg': {'Déjeuner': {'Menu étudiant - Tarif social': ['Chili con carne/riz pilaf', '(Haché origine ou provenance France)', 'OU', 'Cari de carottes lentilles et quinoa'], 'Brasseur 4,70HT / 5.17TTC euros': ['Jambon grill', '(Origine ou provenance France)', 'Sauce Marchand de Vin', 'Frites', 'Légumes du jour']}}, 'Resto U De Liut Mulhouse': {'Déjeuner': {'Menu étudiant 3.30€ ou 1€': ['Chili con carne/riz pilaf', '(Haché origine ou provenance France)', 'OU', 'Cari de carottes lentilles et quinoa'], 'Sandwichs': ['Le Maraicher', 'Le Parisien', 'Le Berger', 'Bagnat Manon', 'Chaud: Bruschettas margarita'], 'Pasta Box': ['Pasta au saumon'], 'Salades': ['La Végé bowl']}}, 'Resto U Esplanade': {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['2ème étage :', 'Cordon bleu ou Poisson pané, sauce tomate maison', 'Petits pois', 'Frites', 'Boulettes végétariennes, sauce tomate maison', 'Petits pois', 'Frites', '1er étage :', 'Poisson aux amandes, sauce tomate maison', 'Petits pois', 'Blé safrané', 'Torsades, sauce bolognaise maison', 'Galette de quinoa provençale, sauce tomate maison', 'Petits pois', 'Blé safrané', 'Soupe de légumes du jour :', 'Chou-fleur et pommes de terre'], 'Desserts 1er et 2ème étage': ['Paris-Brest', 'Tarte au citron', 'Compote de pommes aux spéculoos'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Poisson aux amandes, sauce tomate maison', 'Petits pois', 'Blé safrané', 'Galette de quinoa provençale, sauce tomate maison', 'Petits pois', 'Blé safrané']}, 'Dîner': {'Menus étudiants 2ème étage': ['Fricadelle de boeuf, sauce crème maison', 'Haricots verts', 'Pommes de terre rôties', 'Gratin de pâtes arrabiata maison'], 'Desserts 2ème étage': ['Paris-Brest', 'Tarte au citron', 'Compote de pommes aux spéculoos']}}, 'Resto U Gallia': {'Déjeuner': {'MENU ETUDIANT': ['Chipolatas grillées', 'Frites', 'Bâtonnières de légumes'], 'BRASSERIE': ['Filet mignon de porc ', 'Sauce au Munster', 'Frites', 'Bâtonnières de légumes ', 'Pizza Reine', 'Tarte flambée gratinée'], 'VENTE A EMPORTER': ['FORMULE ÉTUDIANTE : Parisien, eau, fruit', 'Game of cheese', 'Italien', 'Maidele ', 'Salade la Niçoise', 'Panini le Napoli', 'Pizza Reine', 'Tarte flambée gratinée'], 'MENU VEGETARIEN': ['Boulettes de blé Thaï', 'Frites', 'Bâtonnières de légumes']}, 'Dîner': {'MENU ETUDIANT': ['Cordon bleu de dinde', 'Pommes de terre fondantes', 'Légumes'], 'MENU VEGETARIEN': ['Galette potiron et boulghour', 'Pommes de terre fondantes', 'Légumes'], 'ORIGINE ET PROVENANCE DE NOS VIANDES': ['.']}}, 'Resto U Illkirch': {'Déjeuner': {'CAFETERIA': ['Petits déjeuners à partir de 7h45', 'Viennoiseries', 'Sandwichs', 'Snacking chaud', 'Desserts maison, pâtisseries américaines', 'Boissons chaudes et froides'], 'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées'], 'SALLE DES ETUDIANTS - PLAT VEGETARIEN': ['Aiguillettes de blé au fromage', 'Sauce Libanaise', 'Poêlée rustique'], 'SALLE DES ETUDIANTS - MENU DU JOUR': ['Émincé de dinde guanajuato', 'Cari de haricots verts', 'Riz'], 'SALLE DES ETUDIANTS - PATES': ['Tortis à la paysanne'], 'SALLE DES ETUDIANTS - BARBECUE': ['Longe de porc fumée', 'ou', 'Merguez', 'Frites'], 'SALLE DES ETUDIANTS - DESSERTS': ['Paris-Brest', 'ou', 'Crème dessert praliné'], 'SALLE DES PERSONNELS - ENTREES': ['Salade césar', 'ou', 'Assiette montagnarde'], 'SALLE DES PERSONNELS - SUGGESTION DU JOUR': ['Steak haché de boeuf', 'Petits pois', 'Frites'], 'SALLE DES PERSONNELS - MENU DU JOUR': ['Émincé de dinde guanajuato', 'Cari de haricots verts', 'Riz'], 'SALLE DES PERSONNELS - PLAT VEGETARIEN': ['Aiguillettes de blé au fromage', 'Sauce Libanaise', 'Poêlée rustique'], 'SALLE DES PERSONNELS - DESSERTS': ['Tarte aux abricots', 'ou', 'Fromage blanc à la myrtille']}}, 'Resto U Paul Appell': {'Déjeuner': {'Pôle végétal': ['Boulettes de blé', 'Salade Thaï'], 'Flam and Co': ['Poutine ', 'Bœuf & cheddar'], 'Plat du jour': ['Beignets de poisson', 'Sauce tartare', 'Petits pois', 'Pommes persillées'], 'Annexe': ['PASTA PARTY', 'Poivrons & tomates', 'OU', 'Thon']}}}, 'mardi 25 mars 2025': {'Cafeteria De La Fonderie': {'Déjeuner': {'menu étudiant tarif social': ['Cuisse de poulet grillée ', '(origine ou provenance France)', 'Pennes', 'Petits pois', 'OU', 'Bouchées de blé Thaï', 'Sauce Napolitaine', 'Pennes'], 'Sandwich': ['Le Végéta', 'Le Campagnard', "L'Indien", 'Le Bagnat Ugolin'], 'Box de pâtes': ['Pasta au saumon'], 'Salade': ["L'Alsacienne"]}}, 'Cafeteria Le Pege': {'Déjeuner': {'Petit-déjeuner': ['Café & Viennoiseries', '7h30 -10h30'], 'Plat du jour': ['Penne sauce carbonara ', 'Roquette & parmesan'], 'Végétarien': ['Penne sauce aux champignons', 'Roquette & parmesan']}}, 'Cafeteria Mini R': {'Déjeuner': {'Fermeture': ['Structure fermée du Lundi 24 Mars 2025 au Vendredi 28 Mars 2025']}}, 'Cybercafe Ru Illberg': {'Déjeuner': {'Sandwichs': ['Le Végéta', 'Le Campagnard', "L'Indien", 'Le Bagnat Ugolin', 'Chaud: Panini Bolognaise'], 'Pasta Box': ['Pasta au saumon'], 'Salade': ["L'Alsacienne"]}}, 'Le 32': {'Déjeuner': {'Carte du jour au 32 - Plats': ['Magret, sauce au miel et sésame', 'Brick au chèvre, miel et romarin', 'Garnitures', 'Ecrasé de pommes de terre', 'Romanesco'], 'Entrées': ['Salade césar revisitée', 'Soupe de légumes'], 'Desserts': ['Demi cadre framboises', 'Salade de fruits frais']}}, 'Le Cristal Shop Ru Esplanade': {'Déjeuner': {'Plat à emporter Box en verre réutilisable': ['Croûte de volaille aux champignons', 'Duo de carottes', 'Riz pilaf', 'Curry de pois chiches aux légumes maison', 'Riz pilaf', '4,50 € HT/4,95 € TTC', '+ prix de la Box 5,70 € TTC'], 'Burger maison au choix': ['Formule avec frites', 'Burger de boeuf BIO', 'Chicken burger', 'Végé burger'], 'Pizza maison au choix': ['Reine', '4 saisons'], 'Formule étudiante à 1€ tarif boursier / non boursier 3,30 €': ['Formule Be Fit', 'Sandwich, eau plate ou gazeuse, fruit ou yaourt']}}, 'Learning Center': {'Déjeuner': {'Plat du jour': ['Burger / Burger végé'], 'Sandwichs': ['Le Végéta', 'Le Campagnard', "L'Indien", 'Le Bagnat Ugolin', 'Le poulet curry'], 'Pasta box': ['Pasta au saumon'], 'Plat du soir commande Crous&Go': ['Cuisse de poulet grillée ', '(origine ou provenance France)', 'Pennes', 'Petits pois', 'OU', 'Bouchée edamame', 'Sauce Napolitaine', 'Pennes'], 'Salade': ["L'Alsacienne"]}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['Cervelas orloff, poireaux à la crème, pommes de terre sautées'], 'Plat du jour': ['Bouchée à la reine, riz pilaf'], 'Végétarien': ['Cari réunionnais'], 'Extension': ['FERMÉ']}}, 'Resto U De Colmar': {'Déjeuner': {'Menu du jour 3.30€ ou 1€': ['Cuisse de Poulet BBC', '(Origine ou Provenance France)', 'Pennes', 'Petits Pois', 'OU', 'Bouchées Edamame/Carottes', 'Sauce Napolitaine', 'Pennes'], 'Viennoiseries HT': ['En Vente à partir de 8h30 :', 'Croissant Nature à 1,10 euros', 'Pain au Chocolat à 1,20 euros', 'Autre Viennoiserie de 1,10 à 1,40 euros'], 'Les grillades à la carte HT': ["Steak/frites ou légumes à 3,60 euros (l'assiette)", '(Origine France)', "Légumes/Féculents à 2,50 euros (l'assiette)", 'Frites à 2,50 euros (le cornet)', "L'américain à 4,00 euros (le Sandwich)", '(Origine France)'], 'La Pasta box HT': ['Sauce Bolognaise à 3,60 euros'], 'Les sandwichs HT': ['Le Campagnard', 'Le Végéta', "L'Indien", "L'Alsacienne"]}}, 'Resto U De Lillberg': {'Déjeuner': {'Menu étudiant - Tarif social': ['Cuisse de poulet grillée ', '(origine ou provenance France)', 'Pennes', 'Petits pois', 'OU', 'Pennes sauce crème jambon champignon', 'Emmental râpé', 'OU', 'Bouchée edamame', 'Sauce Napolitaine', 'Pennes'], 'Brasseur 4,70HT / 5.17TTC euros': ['Fricassée de porc au munster ', '(origine ou provenance France)', 'Spaetzles', 'Carottes rondelles']}}, 'Resto U De Liut Mulhouse': {'Déjeuner': {'Menu étudiant 3.30€ ou 1€': ['Cuisse de poulet grillée ', '(origine ou provenance France)', 'Pennes', 'Petits pois', 'OU', 'Pennes sauce crème jambon champignon', 'Emmental râpé', 'OU', 'Bouchée edamame', 'Sauce Napolitaine', 'Pennes'], 'Sandwichs': ['Le Végéta', 'Le Campagnard', "L'Indien", 'Le Bagnat Ugolin', 'Chaud: Burger / Burger végé'], 'Pasta Box': ['Pasta au saumon'], 'Salades': ["L'Alsacienne"]}}, 'Resto U Esplanade': {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['2ème étage :', 'Fricadelle de boeuf, sauce marchand de vin', 'Duo de carottes', 'Frites', 'Curry de pois chiches aux légumes maison', 'Riz pilaf', '1er étage :', 'Croûte de volaille aux champignons', 'Duo de carottes', 'Riz pilaf', 'Torsades, sauce carbonara maison', 'Curry de pois chiches aux légumes maison', 'Riz pilaf'], 'Desserts 1er et 2ème étage': ['Crème vanille', 'Donut', 'Eclair au chocolat'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Croûte de volaille aux champignons', 'Duo de carottes', 'Riz pilaf', 'Curry de pois chiches aux légumes maison', 'Riz pilaf']}, 'Dîner': {'Menus étudiants 2ème étage': ['Palette à la diable', 'Petits pois carottes', 'Pommes de terre rôties', 'Aiguillettes de blé, sauce rémoulade', 'Petits pois carottes', 'Pommes de terre rôties'], 'Desserts 2ème étage': ['Crème vanille', 'Donut', 'Eclair au chocolat']}}, 'Resto U Gallia': {'Déjeuner': {'MENU ETUDIANT': ["Boulettes d'agneau à la printanière", "Purée de pommes de terre à l'ancienne", 'Brocolis'], 'BRASSERIE': ['Couscous Royal', 'Pizza Parma', 'Tarte flambée traditionnelle'], 'VENTE A EMPORTER': ['FORMULE ÉTUDIANTE : Parisien, eau, fruit', 'Game of cheese', 'Italien', 'Maidele', 'Salade la Niçoise', 'Pizza Parma', 'Tarte flambée traditionnelle', 'Américain Merguez'], 'MENU VEGETARIEN': ['Friand au fromage', "Purée de pommes de terre à l'ancienne", 'Brocolis']}, 'Dîner': {'MENU ETUDIANT': ["Tarte à l'oignon et au jambon ", 'Salade verte', 'Pommes rissolées'], 'MENU VEGETARIEN': ['Koshari'], 'ORIGINE ET PROVENANCE DE NOS VIANDES': ['menu non communiqué']}}, 'Resto U Illkirch': {'Déjeuner': {'CAFETERIA': ['Petits déjeuners à partir de 7h45', 'Viennoiseries', 'Sandwichs', 'Snacking chaud', 'Desserts maison, pâtisseries américaines', 'Boissons chaudes et froides'], 'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées'], 'SALLE DES ETUDIANTS - PLAT VEGETARIEN': ['Tajine de pois chiches,abricots et amandes', 'Boulgour'], 'SALLE DES ETUDIANTS - MENU DU JOUR': ['Chili con carne', 'Riz'], 'SALLE DES ETUDIANTS - PATES': ['Spaghettis bolognaise'], 'SALLE DES ETUDIANTS - BARBECUE': ["Cuisse de canette à l'orange"], 'SALLE DES ETUDIANTS - DESSERTS': ['Fondant au chocolat', 'ou', 'Compote de pommes'], 'SALLE DES PERSONNELS - ENTREES': ['Salade à la mimolette', 'Ou', 'Salade italienne'], 'SALLE DES PERSONNELS - SUGGESTION DU JOUR': ['Cuisse de poulet à la tournaisienne', 'Choux de Bruxelles', 'Frites'], 'SALLE DES PERSONNELS - MENU DU JOUR': ['Chili con carne', 'Riz'], 'SALLE DES PERSONNELS - PLAT VEGETARIEN': ['Tajine de pois chiches,abricots et amandes', 'Boulgour'], 'SALLE DES PERSONNELS - DESSERTS': ['Tarte aux pommes,cannelle', 'ou', 'Fromage blanc à la rhubarbe']}}}, 'mercredi 26 mars 2025': {'Cafeteria De La Fonderie': {'Déjeuner': {'menu étudiant tarif social': ['Émincé végétal à la Chinoise', 'Riz cantonais', 'OU', 'Samoussas aux légumes', 'Sauce aigre douce au curry ', 'Riz cantonais'], 'Sandwich': ['Le Maraicher', 'Le Parisien', 'Thon mayo', "Le mystère de l'ouest"], 'Box de pâtes': ['Pasta champignons'], 'Salade': ['La Vérone']}}, 'Cafeteria Le Pege': {'Déjeuner': {'Petit-déjeuner': ['Café & Viennoiseries', '7h30 -10h30'], 'Plat du jour': ['Curry de pois chiches Bio & lentilles corail de Plobsheim aux petits légumes', 'Patate douce rôtie', 'Fallafels de Légumineuses'], 'Végétarien': ['Assiette Libanaise, Houmous, Fallafel, Bouchée végétale, quinoa épicée et crudités']}}, 'Cafeteria Mini R': {'Déjeuner': {'Fermeture': ['Structure fermée du Lundi 24 Mars 2025 au Vendredi 28 Mars 2025']}}, 'Cybercafe Ru Illberg': {'Déjeuner': {'Sandwichs': ['Le Maraicher', 'Le Parisien', 'Thon mayo', "Le mystère de l'ouest", 'Chaud:Panini Bolognaise'], 'Pasta Box': ['Pasta champignons'], 'Salade': ['La Vérone']}}, 'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Le 32': {'Déjeuner': {'Carte du jour au 32 - Plats': ['Moussaka végétarienne', 'Salade verte', 'Wok de légumes'], 'Entrées': ['Muffin féta et olives', 'Soupe de légumes'], 'Desserts': ['Tiramisu', 'Salade de fruits frais']}}, 'Le Cristal Shop Ru Esplanade': {'Déjeuner': {'Plat à emporter Box en verre réutilisable': ['JOURNEE VERTE', 'Gratin de légumes', 'Polenta', 'Tajine aux abricots et pois chiches', 'Boulgour aux épices', '4,50 € HT/4,95 € TTC', '+ prix de la Box 5,70 € TTC'], 'Burger maison au choix': ['Formule avec frites', 'Le Bretzel burger', 'Végé burger'], 'Pizza maison au choix': ['4 fromages', 'Légumes du soleil'], 'Formule étudiante à 1€ tarif boursier / non boursier 3,30 €': ['Formule Be Fit', 'Sandwich, eau plate ou gazeuse, fruit ou yaourt']}}, 'Learning Center': {'Déjeuner': {'Plat du jour': ['Tarte Irlandaise'], 'Sandwichs': ['Le Maraicher', 'Le Parisien', 'Thon mayo', "Le Mystère de l'ouest", 'Le Dragon ball'], 'Pasta box': ['Pasta champignons'], 'Plat du soir commande Crous&Go': ['Émincé végétal à la Chinoise', 'Riz cantonais', 'OU', 'Samoussas aux légumes', 'Sauce aigre douce au curry ', 'Riz cantonais'], 'Salade': ['La Vérone']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['Dahl crémeux de pois cassés'], 'Plat du jour': ['Chili sin carne, riz'], 'Végétarien': ['Fajitas de haricots rouges tex mex, salade verte'], 'Extension': ['FERMÉ']}}, 'Resto U De Colmar': {'Déjeuner': {'Menu du jour 3.30€ ou 1€': ['Emincé Végétal à la Chinoise', 'Riz Cantonnais', 'OU', 'Samoussas Aux Légumes', 'Riz Cantonnais'], 'Viennoiseries HT': ['En Vente à partir de 8h30 :', 'Croissant Nature à 1,10 euros', 'Pain au Chocolat à 1,20 euros', 'Autre Viennoiserie de 1,10 à 1,40 euros'], 'Les grillades à la carte HT': ["Steak/frites ou légumes à 3,60 euros (l'assiette)", '(Origine France)', "Légumes/Féculents à 2,50 euros (l'assiette)", 'Frites à 2,50 euros (le cornet)', "L'américain à 4,00 euros (le Sandwich)", '(Origine France)'], 'La Pasta box HT': ['Sauce Champignons à 3,20 euros'], 'Les sandwichs HT': ['Le Parisien', 'Le Maraîcher', 'Le Thon Mayo', "le Mystère de l'Ouest"]}}, 'Resto U De Lillberg': {'Déjeuner': {'Menu étudiant - Tarif social': ['Émincé végétal à la Chinoise', 'Riz cantonais', 'OU', 'Samoussas aux légumes', 'Sauce aigre douce au curry ', 'Riz cantonais'], 'Brasseur 4,70HT / 5.17TTC euros': ['Burger au quinoa à la Provençale', 'Salade verte', 'Potatoes']}}, 'Resto U De Liut Mulhouse': {'Déjeuner': {'Menu étudiant 3.30€ ou 1€': ['Émincé végétal à la Chinoise', 'Riz cantonais', 'OU', 'Samoussas aux légumes', 'Sauce aigre douce au curry ', 'Riz cantonais'], 'Sandwichs': ['Le Maraicher', 'Le Parisien', 'Thon mayo', "Le mystère de l'ouest", 'Chaud:Panini Bolognaise'], 'Pasta Box': ['Pasta champignons'], 'Salades': ['La Vérone']}}, 'Resto U Esplanade': {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['JOURNEE VERTE', '2ème étage :', 'Chili aux lentilles', 'Riz pilaf', 'Tajine aux abricots et pois chiches', 'Boulgour aux épices', '1er étage :', 'Gratin de légumes', 'Polenta', 'Tajine aux abricots et pois chiches', 'Boulgour aux épices'], 'Desserts 1er et 2ème étage': ['Gâteau quinoa pommes', 'Fondant au citron', 'Cocktail de fruits'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Gratin de légumes', 'Polenta', 'Tajine aux abricots et pois chiches', 'Boulgour aux épices']}, 'Dîner': {'Menus étudiants 2ème étage': ['Boulettes de pois chiches BIO, raïta de concombre BIO', 'Haricots verts BIO', 'Boulgour BIO', 'Torsades aux courgettes et pois BIO'], 'Desserts 2ème étage': ['Tarte aux pommes BIO', 'Flan au caramel BIO']}}, 'Resto U Gallia': {'Déjeuner': {'MENU ETUDIANT': ['MENU 100% VEGETARIEN', '100% BIO', 'œufs brouillés à la Portugaise', 'Blé', 'Carottes', 'Émincé végétal à la Chinoise'], 'BRASSERIE': ['MENU 100% VEGETARIEN', 'Risotto de Petit Épeautre au butternut ', 'Pizza forestière', 'Tarte flambée ail et ciboulette'], 'VENTE A EMPORTER': ['FORMULE ÉTUDIANTE : Parisien, eau, fruit', 'Game of cheese', 'Italien', 'Maidele', 'Salade la Niçoise', 'Pizza forestière', 'Tarte flambée ail et ciboulette', 'Pasta box'], 'MENU VEGETARIEN': ['TOUS LES MERCREDIS MIDIS MENU 100% VEGETARIEN']}, 'Dîner': {'MENU ETUDIANT': ['Tomates farcies', 'Semoule', 'Petits pois'], 'MENU VEGETARIEN': ['Couscous végétarien aux fallafels'], 'ORIGINE ET PROVENANCE DE NOS VIANDES': ['menu non communiqué']}}, 'Resto U Illkirch': {'Déjeuner': {'CAFETERIA': ['Petits déjeuners à partir de 7h45', 'Viennoiseries', 'Sandwichs', 'Snacking chaud', 'Desserts maison, pâtisseries américaines', 'Boissons chaudes et froides'], 'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées'], 'SALLE DES ETUDIANTS - PLAT VEGETARIEN': ['Dhal crémeux de pois cassés', 'Pâtes cœur de blé'], 'SALLE DES ETUDIANTS - MENU DU JOUR': ['Chili aux lentilles et haricots rouges', 'Céréales gourmandes'], 'SALLE DES ETUDIANTS - PATES': ['Lasagnes à la provençale'], 'SALLE DES ETUDIANTS - BARBECUE': ['Galette de quinoa à la provençale', 'Sauce au miel'], 'SALLE DES ETUDIANTS - DESSERTS': ['Gâteau de quinoa aux pommes', 'Ou', 'Fromage blanc aux myrtilles'], 'SALLE DES PERSONNELS - ENTREES': ['Salade grecque', 'ou', 'Champignons à la grecque'], 'SALLE DES PERSONNELS - SUGGESTION DU JOUR': ['Mafé épicé à la sauce cacahuètes', 'Semoule'], 'SALLE DES PERSONNELS - MENU DU JOUR': ['Lasagnes à la provençale'], 'SALLE DES PERSONNELS - PLAT VEGETARIEN': ['Chili aux lentilles et haricots rouges', 'Céréales gourmandes'], 'SALLE DES PERSONNELS - DESSERTS': ['Tarte aux fruits de bois', 'ou', 'Mousse au citron']}}}, 'jeudi 27 mars 2025': {'Cafeteria De La Fonderie': {'Déjeuner': {'menu étudiant tarif social': ['Chausson à la Bolognaise', 'Frites', 'Haricots verts', 'OU', 'Msir wot', 'Frites'], 'Sandwich': ['Le Végéta', 'Le Campagnard', 'Le Game of cheese', 'Wrap chicken roll'], 'Box de pâtes': ['Pasta champignons'], 'Salade': ['La New César']}}, 'Cafeteria Le Pege': {'Déjeuner': {'Petit-déjeuner': ['Café & Viennoiseries', '7h30 -10h30'], 'Plat du jour': ['Sauté de porc à l’aigre douce ', 'Légumes à l’asiatique', 'Riz cantonais'], 'Végétarien': ['Samossas de légumes', 'Légumes à l’asiatique', 'Riz cantonais']}}, 'Cafeteria Mini R': {'Déjeuner': {'Fermeture': ['Structure fermée du Lundi 24 Mars 2025 au Vendredi 28 Mars 2025']}}, 'Cybercafe Ru Illberg': {'Déjeuner': {'Sandwichs': ['Le Végéta', 'Le Campagnard', 'Le Game of cheese', 'Wrap chicken roll', 'Chaud: Burger / Burger végé'], 'Pasta Box': ['Pasta champignons'], 'Salade': ['La New César']}}, 'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Le 32': {'Déjeuner': {'Carte du jour au 32 - Plats': ['Paleron de boeuf', 'Risotto vert', 'Garnitures', 'Pommes de terre charlottes au four', 'Poêlée de carottes et céleri'], 'Entrées': ['Wrap végétal', 'Soupe de légumes'], 'Desserts': ['Dôme crème brûlée', 'Salade de fruits frais']}}, 'Le Cristal Shop Ru Esplanade': {'Déjeuner': {'Plat à emporter Box en verre réutilisable': ['Pilons de poulet à la citronnelle', 'Nouilles chinoises', 'Wok de légumes', 'Samoussa aux légumes, sauce au miel', 'Nouilles chinoises', 'Wok de légumes', '4,50 € HT/4,95 € TTC', '+ prix de la Box 5,70 € TTC'], 'Burger maison au choix': ['Formule avec frites', 'Burger de boeuf BIO', 'Chicken burger', 'Végé burger'], 'Pizza maison au choix': ['Poulet', 'Mozzarella'], 'Formule étudiante à 1€ tarif boursier / non boursier 3,30 €': ['Formule Be Fit', 'Sandwich, eau plate ou gazeuse, fruit ou yaourt']}}, 'Learning Center': {'Déjeuner': {'Plat du jour': ['Burger / Burger végé'], 'Sandwichs': ['Le Végéta', 'Le Campagnard', 'Le Game of cheese', 'Wrap chicken roll', "L'Auvergnat"], 'Pasta box': ['Pasta champignons'], 'Plat du soir commande Crous&Go': ['Chausson à la Bolognaise', 'Frites', 'Haricots verts', 'OU', 'Msir wot', 'Frites'], 'Salade': ['La New César']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['chaîne perso: Gombo traditionnel louisianais et son riz au raisin', 'chaîne étudiants: Rougail saucisse et riz'], 'Plat du jour': ['Poisson à la bordelaise et légumes vapeur'], 'Végétarien': ['Curry de patates douces'], 'Extension': ['Tacos au poulet']}}, 'Resto U De Colmar': {'Déjeuner': {'Menu du jour 3.30€ ou 1€': ['Chausson à la Bolognaise de Dinde', 'Frites', 'Haricots Verts', 'OU', 'Misir Wot(Mijoté Ethiopien)', 'Frites'], 'Viennoiseries HT': ['En Vente à partir de 8h30 :', 'Croissant Nature à 1,10 euros', 'Pain au Chocolat à 1,20 euros', 'Autre Viennoiserie de 1,10 à 1,40 euros'], 'Les grillades à la carte HT': ["Steak/frites ou légumes à 3,60 euros (l'assiette)", '(Origine France)', "Légumes/Féculents à 2,50 euros (l'assiette)", 'Frites à 2,50 euros (le cornet)', "L'américain à 4,00 euros (le Sandwich)", '(Origine France)'], 'La Pasta box HT': ['Sauce Thon à la Tomate à 3,20 euros'], 'Les sandwichs HT': ['Le Campagnard', 'Le Végéta', 'Le Game Of Cheese', 'Le Wrap : Le Chicke N Roll']}}, 'Resto U De Lillberg': {'Déjeuner': {'Menu étudiant - Tarif social': ['Chausson à la Bolognaise', 'Frites', 'Haricots verts', 'OU', 'Msir wot', 'Frites'], 'Brasseur 4,70HT / 5.17TTC euros': ['Couscous ', '(Boulettes, merguez, pilon de poulet)']}}, 'Resto U De Liut Mulhouse': {'Déjeuner': {'Menu étudiant 3.30€ ou 1€': ['Chausson à la Bolognaise', 'Frites', 'Haricots verts', 'OU', 'Msir wot', 'Frites'], 'Sandwichs': ['Le Végéta', 'Le Campagnard', 'Le Game of cheese', 'Wrap chicken roll', 'Chaud: Burger / Burger végé'], 'Pasta Box': ['Pasta champignons'], 'Salades': ['La New César']}}, 'Resto U Esplanade': {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['2ème étage:', 'Poutine', 'Frites', 'Samoussa aux légumes, sauce au miel', 'Nouilles chinoises', 'Wok de légumes', '1er étage :', 'Pilons de poulet à la citronnelle', 'Nouilles chinoises', 'Wok de légumes', 'Torsades, sauce aux 3 fromages maison', 'Samoussa aux légumes, sauce au miel', 'Nouilles chinoises', 'Wok de légumes'], 'Desserts 1er et 2ème étage': ['Millefeuille vanille', 'Tarte aux pommes', 'Fromage blanc aux griottes'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Pilons de poulet à la citronnelle', 'Nouilles chinoises', 'Wok de légumes', 'Samoussa aux légumes, sauce au miel', 'Nouilles chinoises', 'Wok de légumes']}, 'Dîner': {'Menus étudiants 2ème étage': ['Chili con carné maison', 'Fajitas de haricots rouges tex mex maison', 'Poêlée mexicaine'], 'Desserts 2ème étage': ['Millefeuille vanille', 'Tarte aux pommes', 'Fromage blanc aux griottes']}}, 'Resto U Gallia': {'Déjeuner': {'MENU ETUDIANT': ['Émince de porc au Pistou'], 'BRASSERIE': ["Suggestion : Pizza Napolitaine 'MAISON'", 'Margarita ou Mortazza'], 'VENTE A EMPORTER': ['FORMULE ÉTUDIANTE : Parisien, eau, fruit', 'Game of cheese', 'Italien', 'Maidele', 'Salade la Niçoise', 'Pizza Margarita', 'Tarte flambée traditionnelle', 'Hamburger / frites'], 'MENU VEGETARIEN': ["Menu 100% local 'Gaines d'Alsace'", 'Chili de lentilles ', 'Pilaf de quinoa']}, 'Dîner': {'MENU ETUDIANT': ['Escalope Viennoise', 'Sauce tomate basilic', 'Julienne de légumes', 'Pâtes'], 'MENU VEGETARIEN': ['Pâtes aux 3 fromages'], 'ORIGINE ET PROVENANCE DE NOS VIANDES': ['.']}}, 'Resto U Illkirch': {'Déjeuner': {'CAFETERIA': ['Petits déjeuners à partir de 7h45', 'Viennoiseries', 'Sandwichs', 'Snacking chaud', 'Desserts maison, pâtisseries américaines', 'Boissons chaudes et froides'], 'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées'], 'SALLE DES ETUDIANTS - PLAT VEGETARIEN': ['Cari de carottes aux deux lentilles', 'Quinoa'], 'SALLE DES ETUDIANTS - MENU DU JOUR': ['Cordon bleu/viennoise', 'Duo de haricots', 'Purée'], 'SALLE DES ETUDIANTS - PATES': ['Gratin de coudes à la savoyarde'], 'SALLE DES ETUDIANTS - BARBECUE': ['Chipolatas', 'ou', 'Fricadelles sauce bordelaise'], 'SALLE DES ETUDIANTS - DESSERTS': ['Crème dessert vanille', 'ou', 'Fondant citron et pois chiches'], 'SALLE DES PERSONNELS - ENTREES': ["Salade d'avocat au thon", 'ou', 'Salade de cervelas-gruyère'], 'SALLE DES PERSONNELS - SUGGESTION DU JOUR': ['Sauté de poulet à la crème de tomates confites', 'Courgettes poêlées', 'Röstis'], 'SALLE DES PERSONNELS - MENU DU JOUR': ['Gratin de coudes à la savoyarde'], 'SALLE DES PERSONNELS - PLAT VEGETARIEN': ['Cari de carottes aux deux lentilles', 'Quinoa'], 'SALLE DES PERSONNELS - DESSERTS': ['Tarte au citron meringuée', 'ou', 'Crêpe miel amandes']}}}, 'vendredi 28 mars 2025': {'Cafeteria De La Fonderie': {'Déjeuner': {'menu étudiant tarif social': ['Filet de colin pané', 'Tagliatelles', 'Courgettes à la Provençale', 'OU', 'Dahl crémeux de lentilles blondes', 'Tagliatelles'], 'Sandwich': ['Le Maraicher', 'Le Parisien', "L'Italien", 'Le Maidele'], 'Box de pâtes': ['Pasta pesto'], 'Salade': ['La Louisiana']}}, 'Cafeteria Le Pege': {'Déjeuner': {'Petit-déjeuner': ['Café & Viennoiseries', '7h30 -10h30'], 'Plat du jour': ['Limande meunière ', 'Duo de carottes & panais', 'Frites', 'ou', 'Petits salés aux lentilles bio de Plobsheim', 'Saucisse fumée'], 'Végétarien': ['Galette potiron boulgour', 'Duo de carottes & panais', 'Frites']}}, 'Cafeteria Mini R': {'Déjeuner': {'Fermeture': ['Structure fermée du Lundi 24 Mars 2025 au Vendredi 28 Mars 2025']}}, 'Cybercafe Ru Illberg': {'Déjeuner': {'Sandwichs': ['Le Maraicher', 'Le Parisien', "L'Italien", 'Le Maidele', 'Chaud: Panini Le Vénézia'], 'Pasta Box': ['Pasta pesto'], 'Salade': ['La Louisiana']}}, 'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Le 32': {'Déjeuner': {'Carte du jour au 32 - Plats': ['Filet de sandre, beurre blanc', 'Polenta au fromage et légumes', 'Garnitures', 'Pépinettes aux herbes', 'Epinards à la crème'], 'Entrées': ['Brick au chèvre, miel et romarin', 'Soupe de légumes'], 'Desserts': ['Charlottine aux fruits rouges', 'Salade de fruits frais']}}, 'Le Cristal Shop Ru Esplanade': {'Déjeuner': {'Plat à emporter Box en verre réutilisable': ['Echine de porc, sauce à la bière', 'Haricots verts', 'Purée de pommes de terre', 'Quiche aux pommes de terre et épinards', 'Haricots verts', 'Torsades', '4,50 € HT/4,95 € TTC', '+ prix de la Box 5,70 € TTC'], 'Burger maison au choix': ['Formule avec frites', 'Burger de boeuf BIO', 'Chicken burger', 'Végé burger'], 'Pizza maison au choix': ['Thon', 'Chèvre'], 'Formule étudiante à 1€ tarif boursier / non boursier 3,30 €': ['Formule Be Fit', 'Sandwich, eau plate ou gazeuse, fruit ou yaourt']}}, 'Learning Center': {'Déjeuner': {'Plat du jour': ['Panini Le Vénézia'], 'Sandwichs': ['Le Maraicher', 'Le Parisien', "L'Italien", 'Le Maidele', 'Le dolce vita'], 'Pasta box': ['Pasta pesto'], 'Plat du soir commande Crous&Go': ['Filet de colin pané', 'Tagliatelles', 'Courgettes à la Provençale', 'OU', 'Dahl crémeux de lentilles blondes', 'Tagliatelles'], 'Salade': ['La Louisiana']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['Fricadelle de bœuf, sauce marchand de vin, chou romanesco, frites'], 'Plat du jour': ['chaîne perso: Tagliatelles aux gésiers confits', 'chaîne étudiants: Menu du jour'], 'Végétarien': ['Boulettes de blé thaï, risotto aux légumes'], 'Extension': ['Lasagnes bolognaise']}}, 'Resto U De Colmar': {'Déjeuner': {'Menu du jour 3.30€ ou 1€': ['Filet de Colin Pané', 'Tagliatelles', 'Courgettes à la Provençale', 'OU', 'Dahl Crémeux de Pois Cassés', 'Tagliatelles'], 'Viennoiseries HT': ['En Vente à partir de 8h30 :', 'Croissant Nature à 1,10 euros', 'Pain au Chocolat à 1,20 euros', 'Autre Viennoiserie de 1,10 à 1,40 euros'], 'Les grillades à la carte HT': ["Steak/frites ou légumes à 3,60 euros (l'assiette)", '(Origine France)', "Légumes/Féculents à 2,50 euros (l'assiette)", 'Frites à 2,50 euros (le cornet)', "L'américain à 4,00 euros (le Sandwich)", '(Origine France)'], 'La Pasta box HT': ['Sauce Pesto à 3,20 euros'], 'Les sandwichs HT': ['Le Parisien', 'Le Maraîcher', "L'Italien", 'La Mauricette : Le Maidele', 'Le Panini : Le Venezia']}}, 'Resto U De Lillberg': {'Déjeuner': {'Menu étudiant - Tarif social': ['Filet de colin pané', 'Tagliatelles', 'Courgettes à la Provençale', 'OU', 'Spaghettis à la Bolognaise ', '(haché origine ou provenance France)', 'OU', 'Dahl crémeux de lentilles blondes', 'Tagliatelles'], 'Brasseur 4,70HT / 5.17TTC euros': ['Lasagnes à la Bolognaise ', '(haché origine ou provenance France)', 'Salade verte']}}, 'Resto U De Liut Mulhouse': {'Déjeuner': {'Menu étudiant 3.30€ ou 1€': ['Filet de colin pané', 'Tagliatelles', 'Courgettes à la Provençale', 'OU', 'Spaghettis à la Bolognaise ', '(haché origine ou provenance France)', 'OU', 'Dahl crémeux de lentilles blondes', 'Tagliatelles'], 'Sandwichs': ['Le Maraicher', 'Le Parisien', "L'Italien", 'Le Maidele', 'Chaud: Panini Le Vénézia'], 'Pasta Box': ['Pasta pesto'], 'Salades': ['La Louisiana']}}, 'Resto U Esplanade': {'Déjeuner': {'Menus étudiants 1er et 2ème étage': ['2ème étage :', 'Merguez, sauce tomate', 'Zaalouk de chou-fleur', 'Frites', 'Quiche aux pommes de terre et épinards', 'Haricots verts', 'Torsades', '1er étage :', 'Echine de porc, sauce à la bière', 'Haricots verts', 'Purée de pommes de terre', 'Torsades, sauce aux 2 saumon maison', 'Quiche aux pommes de terre et épinards', 'Haricots verts', 'Torsades'], 'Desserts 1er et 2ème étage': ['Beignet aux framboises', 'Eclair au café', 'Tiramisu'], 'Cristal Shop (RDC) Cafétéria': ['Plat à emporter en box en verre ou sur place', 'Echine de porc, sauce à la bière', 'Haricots verts', 'Purée de pommes de terre', 'Quiche aux pommes de terre et épinards', 'Haricots verts', 'Torsades']}, 'Dîner': {'Menus étudiants 2ème étage': ['Cordon bleu, sauce tomate', 'Carottes au céleri branche', 'Gratin dauphinois'], 'Desserts 2ème étage': ['Beignet aux framboises', 'Eclair au café', 'Tiramisu']}}, 'Resto U Gallia': {'Déjeuner': {'MENU ETUDIANT': ['Grignottes de poulet', 'Sauce aux herbes', 'Poêlée Printanière'], 'BRASSERIE': ["Tourte au bœuf 'MAISON' ", 'Salade Auvergnate', 'Pizza', 'Tarte flambée'], 'VENTE A EMPORTER': ['FORMULE ÉTUDIANTE : Parisien, eau, fruit', 'Game of cheese', 'Italien', 'Maidele', 'Salade la Niçoise', 'Pizza', 'Tarte flambée', 'Hot-dog'], 'MENU VEGETARIEN': ['Galette au sarrasin et lentilles', 'Poêlée Printanière']}, 'Dîner': {'MENU ETUDIANT': ['Palette à la diable', 'Riz pilaf', 'Légumes'], 'MENU VEGETARIEN': ['Galette végétarienne'], 'ORIGINE ET PROVENANCE DE NOS VIANDES': ['.']}}, 'Resto U Illkirch': {'Déjeuner': {'CAFETERIA': ['Petits déjeuners à partir de 7h45', 'Viennoiseries', 'Sandwichs', 'Snacking chaud', 'Desserts maison, pâtisseries américaines', 'Boissons chaudes et froides'], 'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées'], 'SALLE DES ETUDIANTS - PLAT VEGETARIEN': ['Curry de boulettes aux légumes', 'Petit épeautre'], 'SALLE DES ETUDIANTS - MENU DU JOUR': ['Émincé de porc aux cacahuètes', 'Riz cantonais'], 'SALLE DES ETUDIANTS - PATES': ['Spaetzle à la choucroute et aux lardons'], 'SALLE DES ETUDIANTS - BARBECUE': ['Galopin de veau sauce champignons'], 'SALLE DES ETUDIANTS - DESSERTS': ['Pêche sur lit de crème pâtissière'], 'SALLE DES PERSONNELS - ENTREES': ['Pâté en croute-crudités', 'ou', 'Oeuf mollet aux lardons'], 'SALLE DES PERSONNELS - SUGGESTION DU JOUR': ['Fish and chips sauce rémoulade', "Carottes à l'oriental", 'Pommes de terre au four'], 'SALLE DES PERSONNELS - MENU DU JOUR': ['Émincé de porc aux cacahuètes', 'Riz cantonais'], 'SALLE DES PERSONNELS - PLAT VEGETARIEN': ['Curry de boulettes aux légumes', 'Petit épeautre'], 'SALLE DES PERSONNELS - DESSERTS': ["Tarte à l'ananas", 'ou', 'Mousse cappucino']}}}, 'lundi 31 mars 2025': {'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['Escalope viennoise, sauce tomate, choux fleurs, pommes rissolées'], 'Plat du jour': ['Crêpe au jambon et fromage, salade champêtre'], 'Végétarien': ['Pâtes aux fromages'], 'Extension': ['Pasta party']}}, 'Resto U Illkirch': {'Déjeuner': {'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées']}}}, 'mercredi 2 avril 2025': {'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['Galette orge chèvre miel, gratin de légumes'], 'Plat du jour': ['Croissant au fromage, salade auvergnate'], 'Végétarien': ['Kefta coriandre menthe, sauce tzatziki, semoule'], 'Extension': ['FERMÉ']}}, 'Resto U Illkirch': {'Déjeuner': {'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées']}}}, 'jeudi 3 avril 2025': {'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['Currywurst, petits pois à la française, frites'], 'Plat du jour': ['Cari de poisson au combava, riz au safran'], 'Végétarien': ['Pita à la galette de soja tomate basilic, sauce aux herbes, salade composée'], 'Extension': ['Nuggets de poulet, brocolis, gratin de pommes de terre']}}, 'Resto U Illkirch': {'Déjeuner': {'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées']}}}, 'vendredi 4 avril 2025': {'Kiosque Ru Esplanade': {'Déjeuner': {'Fermeture': ['Structure fermée du Dimanche 23 Février 2025 au Samedi 31 Mai 2025']}}, 'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['chaîne perso: Bacon burger, salade verte, potatoes', 'chaîne étudiants: Grillade du jour'], 'Plat du jour': ['Quiche lorraine, légumes'], 'Végétarien': ['Boulettes de pois chiche, sauce au fromage blanc, dahl de lentilles aux épices'], 'Extension': ['Raviolis à la sauce tomate']}}, 'Resto U Illkirch': {'Déjeuner': {'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées']}}}, 'mardi 1 avril 2025': {'Resto U Cronenbourg': {'Déjeuner': {'Grillade': ['chaîne perso: Filet de loup, sauce à la vanille, haricots verts, pomme duchesse', 'chaîne étudiants: Filet de colin , sauce à la vanille, haricots verts, pomme duchesse'], 'Plat du jour': ['Emincé de dinde à la crème, riz aux petits légumes'], 'Végétarien': ['Tchoutchouka aux œufs, boulgour'], 'Extension': ['Doner à garnir']}}, 'Resto U Illkirch': {'Déjeuner': {'SALLE DES ETUDIANTS - ENTREES': ['Crudités variées']}}}})
def show_item(list_):
i = 1
for item in list_:
print('%s : %s'%(str(i),item))
i+=1
quit = 'N'
change_rest = 'Y'
while quit=='N':
dates = list(all_dates_all_menus.keys())
show_item(dates)
date_choosed = int(input('Select the date (type the number aside)'))
restaurants = list(all_dates_all_menus[dates[date_choosed-1]].keys())
while change_rest == 'Y':
print('---------------------------------------\n\n')
show_item(restaurants)
rest_choosed = int(input('Select the restaurant (type the number aside)'))
meal_keys = list(all_dates_all_menus[dates[date_choosed-1]][restaurants[rest_choosed-1]].keys())
show_item(meal_keys)
meal_choosed = int(input('Select the meal (type the number aside)'))
menu = all_dates_all_menus[dates[date_choosed-1]][restaurants[rest_choosed-1]][meal_keys[meal_choosed-1]]
for meal in menu:
print('''%s :
%s
'''%(meal,menu[meal]))
change_rest = input('Do you want to select another restaurant ? (Y/N)')
quit = input('Do you want to quit ? (Y/N)')
if quit == 'N':
change_rest = 'Y'
1 : lundi 24 mars 2025 2 : mardi 25 mars 2025 3 : mercredi 26 mars 2025 4 : jeudi 27 mars 2025 5 : vendredi 28 mars 2025 6 : lundi 31 mars 2025 7 : mercredi 2 avril 2025 8 : jeudi 3 avril 2025 9 : vendredi 4 avril 2025 10 : mardi 1 avril 2025 Select the date (type the number aside)2 --------------------------------------- 1 : Cafeteria De La Fonderie 2 : Cafeteria Le Pege 3 : Cafeteria Mini R 4 : Cybercafe Ru Illberg 5 : Le 32 6 : Le Cristal Shop Ru Esplanade 7 : Learning Center 8 : Resto U Cronenbourg 9 : Resto U De Colmar 10 : Resto U De Lillberg 11 : Resto U De Liut Mulhouse 12 : Resto U Esplanade 13 : Resto U Gallia 14 : Resto U Illkirch Select the restaurant (type the number aside)2 1 : Déjeuner Select the meal (type the number aside)1 Petit-déjeuner : ['Café & Viennoiseries', '7h30 -10h30'] Plat du jour : ['Penne sauce carbonara ', 'Roquette & parmesan'] Végétarien : ['Penne sauce aux champignons', 'Roquette & parmesan'] Do you want to select another restaurant ? (Y/N)N Do you want to quit ? (Y/N)Y