Skip to content

Instantly share code, notes, and snippets.

@kursatyalin
Created September 13, 2022 15:45
Show Gist options
  • Save kursatyalin/749704a5dbdc98d00fa3ba51d9cc0e04 to your computer and use it in GitHub Desktop.
Save kursatyalin/749704a5dbdc98d00fa3ba51d9cc0e04 to your computer and use it in GitHub Desktop.
Superlig Web Kazıma - 1
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyPNQlaCT9XvnR2K32B5oGLP",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/kursatyalin/749704a5dbdc98d00fa3ba51d9cc0e04/superlig-web-kaz-ma-1.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": "AfZ5ZIUThUZG"
},
"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=10)\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",
" print(baslik_ve_degerler)\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, True)\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\")"
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment