Amazing-Python-Scripts

Форк
0
129 строк · 4.1 Кб
1
import requests
2
from bs4 import BeautifulSoup
3
import tkinter as tk
4
from tkinter import ttk
5
from tkinter import font as tkFont
6
from selenium import webdriver
7
from selenium.webdriver.common.keys import Keys
8
import time
9

10
driver_path = input('Enter path for chromedriver: ')
11

12
# Categories and their URL slugs
13
most_active = {'Most Active equities - Main Board': 'mae_mainboard_tableC', 'Most Active equities - SME': 'mae_sme_tableC', 'Most Active equities - ETFs': 'mae_etf_tableC',
14
               'Most Active equities - Price Spurts': 'mae_pricespurts_tableC', 'Most Active equities - Volume Spurts': 'mae_volumespurts_tableC'}
15
top_20 = {'NIFTY 50 Top 20 Gainers': 'topgainer-Table',
16
          'NIFTY 50 Top 20 Losers': 'toplosers-Table'}
17

18
# Function to generate request url based on user choice
19

20

21
def generate_url():
22
    category_choice = category.get()
23
    if (category_choice in most_active):
24
        page = 'most-active-equities'
25
    else:
26
        page = 'top-gainers-loosers'
27
    url = 'https://www.nseindia.com/market-data/{}'.format(page)
28
    return url
29

30
# Function to scrape stock data from generated URL
31

32

33
def scraper():
34
    url = generate_url()
35
    driver = webdriver.Chrome(driver_path)
36
    driver.get(url)
37

38
    # Wait for results to load
39
    time.sleep(5)
40
    html = driver.page_source
41

42
    # Start scraping resultant html data
43
    soup = BeautifulSoup(html, 'html.parser')
44

45
    # Based on choice scrape div
46
    category_choice = category.get()
47
    if category_choice in most_active:
48
        category_div = most_active[category_choice]
49
    else:
50
        category_div = top_20[category_choice]
51

52
    # Find the table to scrape
53
    results = soup.find("table", {"id": category_div})
54
    rows = results.findChildren('tr')
55

56
    table_data = []
57
    row_values = []
58
    # Append stock data into a list
59
    for row in rows:
60
        cells = row.findChildren(['th', 'td'])
61
        for cell in cells:
62
            value = cell.text.strip()
63
            value = " ".join(value.split())
64
            row_values.append(value)
65
        table_data.append(row_values)
66
        row_values = []
67

68
    # Formatting the stock data stored in the list
69
    stocks_data = ""
70
    for stock in table_data:
71
        single_record = ""
72
        for cell in stock:
73
            format_cell = "{:<20}"
74
            single_record += format_cell.format(cell[:20])
75
        single_record += "\n"
76
        stocks_data += single_record
77

78
     # Adding the formatted data into tkinter GUI
79
    query_label.config(state=tk.NORMAL)
80
    query_label.delete(1.0, "end")
81
    query_label.insert(1.0, stocks_data)
82
    query_label.config(state=tk.DISABLED)
83
    driver.close()
84

85

86
# Creating tkinter window
87
window = tk.Tk()
88
window.title('NSE Stock data')
89
window.geometry('1200x1000')
90
window.configure(bg='white')
91

92
style = ttk.Style()
93
style.configure('my.TButton', font=('Helvetica', 16))
94
style.configure('my.TFrame', background='white')
95

96
# label text for title
97
ttk.Label(window, text="NSE Stock market data",
98
          background='white', foreground="SpringGreen2",
99
          font=("Helvetica", 30, 'bold')).grid(row=0, column=1)
100

101
# label
102
ttk.Label(window, text="Select Market data to get:", background='white',
103
          font=("Helvetica", 15)).grid(column=0,
104
                                       row=5, padx=10, pady=25)
105

106
# Combobox creation
107
category = ttk.Combobox(
108
    window, width=60, state='readonly', font="Helvetica 15")
109

110
submit_btn = ttk.Button(window, text="Get Stock Data!",
111
                        style='my.TButton', command=scraper)
112

113
# Adding combobox drop down list
114
category['values'] = ('Most Active equities - Main Board', 'Most Active equities - SME', 'Most Active equities - ETFs', 'Most Active equities - Price Spurts',
115
                      'Most Active equities - Volume Spurts', 'NIFTY 50 Top 20 Gainers', 'NIFTY 50 Top 20 Losers')
116

117
category.grid(column=1, row=5, padx=10)
118
category.current(0)
119

120
submit_btn.grid(row=5, column=3, pady=5, padx=15, ipadx=5)
121

122
frame = ttk.Frame(window, style='my.TFrame')
123
frame.place(relx=0.50, rely=0.12, relwidth=0.98, relheight=0.90, anchor="n")
124

125
# To display stock data
126
query_label = tk.Text(frame, height="52", width="500", bg="alice blue")
127
query_label.grid(row=7,  columnspan=2)
128

129
window.mainloop()
130

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.