Created
September 29, 2024 11:36
-
-
Save byigitt/aa139364e115b7ecdb3142380290f630 to your computer and use it in GitHub Desktop.
KYK Yemek Data Scraperi
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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