sintamar commited on
Commit
5aaf361
·
verified ·
1 Parent(s): d34ace9

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +95 -0
app.py ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from selenium import webdriver
3
+ from selenium.webdriver.chrome.options import Options
4
+ from webdriver_manager.chrome import ChromeDriverManager
5
+ from bs4 import BeautifulSoup
6
+ import time
7
+
8
+ st.set_page_config(page_title="Klasemen Liga 1 - Flashscore", layout="wide")
9
+
10
+ st.title("🏆 Klasemen Liga 1 Indonesia (Flashscore)")
11
+ st.write("Data ini diambil secara langsung menggunakan **headless browser** (Selenium) dan ditampilkan ulang dalam format HTML yang responsif.")
12
+
13
+ # URL target
14
+ url = "https://www.flashscore.co.id/sepak-bola/indonesia/super-league/peringkat/#/QqIn9e16/peringkat/keseluruhan/"
15
+
16
+ # Tombol ambil data
17
+ if st.button("Ambil Data Klasemen ⚽"):
18
+ # Opsi Chrome headless
19
+ chrome_options = Options()
20
+ chrome_options.add_argument("--headless=new")
21
+ chrome_options.add_argument("--disable-gpu")
22
+ chrome_options.add_argument("--no-sandbox")
23
+ chrome_options.add_argument("--disable-dev-shm-usage")
24
+ chrome_options.add_argument("--window-size=1920,1080")
25
+
26
+ st.info("Sedang memuat halaman Flashscore... Harap tunggu 5–10 detik.")
27
+ driver = webdriver.Chrome(ChromeDriverManager().install(), options=chrome_options)
28
+ driver.get(url)
29
+ time.sleep(8) # waktu tunggu agar JS memuat tabel
30
+ page_source = driver.page_source
31
+ driver.quit()
32
+
33
+ soup = BeautifulSoup(page_source, "html.parser")
34
+
35
+ # Coba cari elemen tabel utama
36
+ table_div = soup.find("div", class_="ui-table")
37
+ if not table_div:
38
+ table_div = soup.find("div", {"id": "live-table"})
39
+
40
+ if table_div:
41
+ st.success("Berhasil mengambil tabel klasemen ✅")
42
+
43
+ # Tambahkan CSS responsif
44
+ responsive_html = f"""
45
+ <html>
46
+ <head>
47
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
48
+ <style>
49
+ body {{
50
+ font-family: Arial, sans-serif;
51
+ margin: 0;
52
+ padding: 0;
53
+ background: #f8f9fa;
54
+ }}
55
+ .table-container {{
56
+ max-width: 100%;
57
+ overflow-x: auto;
58
+ background: white;
59
+ margin: 20px auto;
60
+ padding: 10px;
61
+ border-radius: 10px;
62
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
63
+ }}
64
+ .ui-table, table {{
65
+ width: 100%;
66
+ border-collapse: collapse;
67
+ }}
68
+ .ui-table tr:nth-child(even) {{
69
+ background: #f2f2f2;
70
+ }}
71
+ .ui-table th, .ui-table td {{
72
+ padding: 8px 10px;
73
+ text-align: left;
74
+ font-size: 14px;
75
+ }}
76
+ @media (max-width: 600px) {{
77
+ .ui-table th, .ui-table td {{
78
+ font-size: 12px;
79
+ padding: 6px;
80
+ }}
81
+ }}
82
+ </style>
83
+ </head>
84
+ <body>
85
+ <div class="table-container">
86
+ {str(table_div)}
87
+ </div>
88
+ </body>
89
+ </html>
90
+ """
91
+
92
+ # Tampilkan di Streamlit
93
+ st.components.v1.html(responsive_html, height=900, scrolling=True)
94
+ else:
95
+ st.error("Gagal menemukan elemen tabel klasemen. Coba tingkatkan waktu tunggu atau periksa struktur halaman.")