Last active
September 14, 2022 09:02
-
-
Save kursatyalin/9a12ae8ba28866bd261ebc9401357b4f to your computer and use it in GitHub Desktop.
super-lig-web-kaz-ma.ipynb
This file contains 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
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/kursatyalin/9a12ae8ba28866bd261ebc9401357b4f/super-lig-web-kaz-ma.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"id": "hnw5qUR5TO01" | |
}, | |
"outputs": [], | |
"source": [ | |
"# -*- coding: utf-8 -*-\n", | |
"\"\"\"\n", | |
"Bu kod, TFF Süper Lig sitesinden güncel haftaya kadar puan cetvelini\n", | |
"çeker ve Excel çalışma kitabına her hafta ayrı bir sayfa olacak şekilde\n", | |
"yazdırır.\n", | |
"\"\"\"\n", | |
"\n", | |
"# İlgili kütüphaneleri import et\n", | |
"import requests\n", | |
"from bs4 import BeautifulSoup\n", | |
"import pandas as pd\n", | |
"\n", | |
"# GUNCEL HAFTA değişkeni tanımla\n", | |
"GUNCEL_HAFTA = 1\n", | |
"\n", | |
"def puan_cetveli_yazdir(hafta_sayisi):\n", | |
" \"\"\"\n", | |
" Bu fonksiyon güncel hafta dahil tüm hafta puan cetvellerini Excel'e yazdırır.\n", | |
" \"\"\"\n", | |
"\n", | |
" # GUNCEL_HAFTA değişkenini fonksiyon içinde global bir değişken olarak tanımla\n", | |
" global GUNCEL_HAFTA\n", | |
"\n", | |
" # Siteye istek yolla ve gelen cevabı r değişkenine ata\n", | |
" url = 'https://www.tff.org/default.aspx?pageID=198&hafta='+str(hafta_sayisi)\n", | |
" try:\n", | |
" r = requests.get(url,timeout=15)\n", | |
" r.raise_for_status()\n", | |
" except requests.exceptions.HTTPError as errh:\n", | |
" print(\"Http Hatası:\",errh)\n", | |
" except requests.exceptions.ConnectionError as errc:\n", | |
" print(\"Bağlanma Hatası:\",errc)\n", | |
" except requests.exceptions.Timeout as errt:\n", | |
" print(\"Zaman aşımı hatası:\",errt)\n", | |
" except requests.exceptions.RequestException as err:\n", | |
" print(\"Başka bir hata\",err)\n", | |
"\n", | |
" # Gelen html sayfasının metin içeriğini al\n", | |
" html_doc = r.text\n", | |
"\n", | |
" # Html sayfasını parse et\n", | |
" soup = BeautifulSoup(html_doc, 'html.parser')\n", | |
"\n", | |
" # Puan cetvelinin olduğu div öğesini bul\n", | |
" puan_cetveli_genel = soup.find('div', {'id':\"ctl00_MPane_m_198_10561_ctnr_m_198_10561_Panel1\"})\n", | |
"\n", | |
" ## print(\"Puan cetveli Genel:\\n\", puan_cetveli_genel.prettify())\n", | |
" # puan_tablosu_genel'in içindeki başlık ve değerleri getir\n", | |
" baslik_ve_degerler = puan_cetveli_genel.find_all('span')\n", | |
"\n", | |
" # baslik_ve_degerlerdeki başlık kısmını al\n", | |
" # Bu şekilde puan tablosunun başlıklarını oluşturuyoruz.\n", | |
" baslik = []\n", | |
" for b in baslik_ve_degerler[0:8]:\n", | |
" baslik.append(b.text)\n", | |
"\n", | |
" # baslik_ve_degerler'in içindeki değerleri al\n", | |
" degerler = []\n", | |
" for i in baslik_ve_degerler[8:]:\n", | |
" degerler.append(int(i.text))\n", | |
"\n", | |
" # Her 8'li sayı grubu bir takımın istatistiğini göstermektedir.\n", | |
" # Her 8'li sayı grubunu ayrı bir listede tut\n", | |
" takım_degerler = [degerler[x:x+8] for x in range(0,len(degerler),8)]\n", | |
"\n", | |
" # Takım isimlerinin bulunduğu html öğesini getir\n", | |
" takimlar = puan_cetveli_genel.find_all('a')\n", | |
"\n", | |
" # Takım isimlerini al ve takim_listesi listesine ekle\n", | |
" takim_listesi = []\n", | |
" for takim in takimlar:\n", | |
" takim_listesi.append(takim.text)\n", | |
"\n", | |
" # takim_listesindeki her bir takımı istatistik listesindeki her 8'li grup ile eşleştir\n", | |
" puan_cetveli = dict(zip(takim_listesi, takım_degerler))\n", | |
"\n", | |
" # Liglerin oynandığı hafta bilgisini bul\n", | |
" # Hafta bilgisinin olduğu ilgili html öğesini bul\n", | |
" ust_tablo = soup.find('div', {'id':\"ctl00_MPane_m_198_10561_ctnr_m_198_10561_ht\"})\n", | |
"\n", | |
" # ust_tablo'daki güncel haftayı seç\n", | |
" # Güncel haftanın her zaman class'ı haftaNoOff değerini alır\n", | |
" GUNCEL_HAFTA = int(ust_tablo.find('td', {'class':'haftaNoOff'}).text)\n", | |
" \n", | |
" # Diğer haftanın her zaman class'ı haftaNoActive değerini alır\n", | |
" # Kod güncel haftaya geldiği zaman GUNCEL_HAFTA artık diğer hafta olur\n", | |
" if hafta_sayisi != GUNCEL_HAFTA:\n", | |
" diger_hafta = int(ust_tablo.find('td', {'class':'haftaNoActive'}).text)\n", | |
" else:\n", | |
" diger_hafta = GUNCEL_HAFTA\n", | |
" \n", | |
" # puan_cetveli_df dataframe oluştur\n", | |
" puan_cetveli_df = pd.DataFrame.from_dict(data=puan_cetveli, orient='index',\n", | |
" columns=baslik)\n", | |
" \n", | |
" # İndex'i resetle ve ismini Takım olarak değiştir\n", | |
" puan_cetveli_df = puan_cetveli_df.reset_index().rename(columns={'index':'Takım'})\n", | |
"\n", | |
" # Takım sütunundaki '\"1., 2., 18.\" gibi numaraları boş karakter ile değiştir\n", | |
" puan_cetveli_df['Takım'].replace(regex=r'^(\\d+\\.)', value='', inplace=True)\n", | |
"\n", | |
" # 2. sütuna \"Hafta\" isminde bir sütun ekle\n", | |
" puan_cetveli_df.insert(1, \"Hafta\", hafta_sayisi)\n", | |
"\n", | |
" # İlk sütuna \"Sıra\" isminde bir sütun ekle\n", | |
" puan_cetveli_df.insert(0, 'Sıra', range(1, len(puan_cetveli_df)+1))\n", | |
"\n", | |
" # Excel'de bir çalışma sayfası oluştur ve \n", | |
" # sonra ilk hafta puan durumu sayfasını oluştur\n", | |
" # İlk hafta dışındaki diğer haftaları ayrı bir sayfa olarak ekle\n", | |
" if diger_hafta == 1:\n", | |
" puan_cetveli_df.to_excel('superlig_puan_durumu.xlsx', index=False, sheet_name=str(hafta_sayisi)+\".hafta\")\n", | |
" else:\n", | |
" with pd.ExcelWriter('superlig_puan_durumu.xlsx',\n", | |
" mode='a') as writer: \n", | |
" puan_cetveli_df.to_excel(writer, index=False, sheet_name=str(hafta_sayisi)+\".hafta\")\n", | |
"\n", | |
"def puan_cetvelini_olustur():\n", | |
" \"\"\"\n", | |
" Bu fonksiyon güncel hafta dahil tüm hafta puan cetvellerini Excel'e yazdırır.\n", | |
" \"\"\"\n", | |
" hafta_sayisi = 1\n", | |
" while hafta_sayisi <= GUNCEL_HAFTA:\n", | |
" print(f\"{hafta_sayisi}.hafta yazdırıldı.\")\n", | |
" puan_cetveli_yazdir(hafta_sayisi)\n", | |
" hafta_sayisi = hafta_sayisi + 1\n", | |
" print(\"*******************\")\n", | |
" print(f\"{GUNCEL_HAFTA} haftalık puan cetveli Excel'de oluşturuldu.\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "b8wUYlv-m8Au", | |
"outputId": "c8221316-5937-429a-99d3-715c6a324ddc" | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"1.hafta yazdırıldı.\n", | |
"2.hafta yazdırıldı.\n", | |
"3.hafta yazdırıldı.\n", | |
"4.hafta yazdırıldı.\n", | |
"5.hafta yazdırıldı.\n", | |
"6.hafta yazdırıldı.\n", | |
"*******************\n", | |
"6 haftalık puan cetveli Excel'de oluşturuldu.\n" | |
] | |
} | |
], | |
"source": [ | |
"# puan_cetvelini_olustur fonksiyonunu çağır\n", | |
"puan_cetvelini_olustur()" | |
] | |
} | |
], | |
"metadata": { | |
"colab": { | |
"provenance": [], | |
"collapsed_sections": [], | |
"mount_file_id": "18kuzBy4vliOYuYL9nuvcpar6novJVuhg", | |
"authorship_tag": "ABX9TyONglQOW7qst7gil9tNBI40", | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"display_name": "Python 3", | |
"name": "python3" | |
}, | |
"language_info": { | |
"name": "python" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment