Skip to content

Instantly share code, notes, and snippets.

@byigitt
Created September 29, 2024 11:36
Show Gist options
  • Select an option

  • Save byigitt/aa139364e115b7ecdb3142380290f630 to your computer and use it in GitHub Desktop.

Select an option

Save byigitt/aa139364e115b7ecdb3142380290f630 to your computer and use it in GitHub Desktop.
KYK Yemek Data Scraperi
import requests
from bs4 import BeautifulSoup
import json
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
links = [
"https://kykyemek.com/Menu/GetDailyMenu/Ankara?city=Ankara&mealType=false",
"https://kykyemek.com/Menu/GetDailyMenu/Ankara?city=Ankara&mealType=true",
"https://kykyemek.com/Menu/GetDailyMenu/Antalya?city=Antalya&mealType=false",
"https://kykyemek.com/Menu/GetDailyMenu/Antalya?city=Antalya&mealType=true",
"https://kykyemek.com/Menu/GetDailyMenu/Canakkale?city=Canakkale&mealType=false",
"https://kykyemek.com/Menu/GetDailyMenu/Canakkale?city=Canakkale&mealType=true",
"https://kykyemek.com/Menu/GetDailyMenu/Eskisehir?city=Eskisehir&mealType=false",
"https://kykyemek.com/Menu/GetDailyMenu/Eskisehir?city=Eskisehir&mealType=true",
"https://kykyemek.com/Menu/GetDailyMenu/Istanbul?city=Istanbul&mealType=false",
"https://kykyemek.com/Menu/GetDailyMenu/Istanbul?city=Istanbul&mealType=true",
"https://kykyemek.com/Menu/GetDailyMenu/Izmir?city=Izmir&mealType=false",
"https://kykyemek.com/Menu/GetDailyMenu/Izmir?city=Izmir&mealType=true",
"https://kykyemek.com/Menu/GetDailyMenu/Manisa?city=Manisa&mealType=false",
"https://kykyemek.com/Menu/GetDailyMenu/Manisa?city=Manisa&mealType=true",
"https://kykyemek.com/Menu/GetDailyMenu/Trabzon?city=Trabzon&mealType=false",
"https://kykyemek.com/Menu/GetDailyMenu/Trabzon?city=Trabzon&mealType=true"
]
def extract_meal_data(html):
soup = BeautifulSoup(html, 'html.parser')
meals = []
cards = soup.find_all("div", class_="card cardStyle mainPageColor")
for card in cards:
date = card.find("p", class_="date").text.strip() if card.find("p", class_="date") else "Unknown Date"
meal_items = [p.text.strip() for p in card.find_all("p", style="color:#503C3C; font-weight:700")]
calorie = card.find("p", class_="text-end").text.strip() if card.find("p", class_="text-end") else "N/A"
meals.append({
"date": date,
"items": meal_items,
"calories": calorie
})
return meals
def get_all_meal_data(links):
all_data = {}
with requests.Session() as session:
for url in links:
try:
response = session.get(url, timeout=10)
response.raise_for_status()
city = url.split("city=")[1].split("&")[0]
meal_type = "Dinner" if "mealType=true" in url else "Breakfast"
meal_data = extract_meal_data(response.text)
if city not in all_data:
all_data[city] = {}
all_data[city][meal_type] = meal_data
except requests.exceptions.RequestException as e:
logging.error(f"[!] fetch error {url} -: {e}")
except Exception as e:
logging.error(f"[!] parsing error {url} -: {e}")
return all_data
def save_meal_data_to_json(filename="meal_data.json"):
data = get_all_meal_data(links)
with open(filename, "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=4)
logging.info(f"[+] yemek verisi {filename} dosyasina kaydedildi!")
if __name__ == "__main__":
save_meal_data_to_json()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment