Prerequisite: BeautifulSoup, requests, tkinter, datetime
In this article, we are going to discuss how to get Gold and Silver Price in India Using Python in Tkinter. There is a variation in price with time to time, price of gold and silver is moved by a combination of supply, demand, and investor behavior.
We will use goodreturns website for fetching gold and silver price. We will create multiple functions for different operation:
- silver_price(): This function is used for getting the silver price. For silver, we will use this URL.
- gold_price(): This function is used for getting the gold price. For Gold, we will use this URL.
- get_number_from_string(): This function is used to extract integer or float from string.
- change_price(): This function is used to get the gold or silver price of a particular weight.
Step-by-step Approach:
Step1#
Import Required Libraries.
# Import Required library from bs4 import BeautifulSoup
import requests
from tkinter import *
from datetime import date
from tkinter import ttk
|
Step2#
Get Silver and Gold Price.
# method to get the price of silver def silver_price():
# getting the request from url
data = requests.get(
# converting the text
soup = BeautifulSoup(data.text, 'html.parser' )
# finding meta info for the current price
price = soup.find( "div" , class_ = "gold_silver_table right-align-content" ).find(
"tr" , class_ = "odd_row" ).findAll( "td" )
# returning the price in text
return price[ 1 ].text
# method to get the price of gold def gold_price():
# getting the request from url
data = requests.get(
# converting the text
soup = BeautifulSoup(data.text, 'html.parser' )
# finding meta info for the current price
price = soup.find( "div" , class_ = "gold_silver_table right-align-content" ).find(
"tr" , class_ = "odd_row" ).findAll( "td" )
# returning the price in text
return price[ 1 ].text
|
Step3#
Get Integer or float value from the string.
# Extract Integer or Float from String def get_number_from_string(string):
return float (' '.join([x for x in string if x.isdigit() or x == ' .']))
|
Step4#
Get the price of gold and silver for a particular weight.
# Get price for a particular weight def change_price(weight_value):
g_price = float (weight_value) * get_number_from_string(gold_price())
s_price = float (weight_value) * get_number_from_string(silver_price())
silver_price_label.config(text = f "{s_price} Rs" )
gold_price_label.config(text = f "{g_price} Rs" )
|
Below is the implementation based on the above approach:
# Import Required library from bs4 import BeautifulSoup
import requests
from tkinter import *
from datetime import date
from tkinter import ttk
# Extract Integer or Float from String def get_number_from_string(string):
return float (' '.join([x for x in string if x.isdigit() or x == ' .']))
# Returns the current local date today = date.today()
# method to get the price of silver def silver_price():
# getting the request from url
data = requests.get(
# converting the text
soup = BeautifulSoup(data.text, 'html.parser' )
# finding meta info for the current price
price = soup.find( "div" , class_ = "gold_silver_table right-align-content" ).find(
"tr" , class_ = "odd_row" ).findAll( "td" )
# returning the price in text
return price[ 1 ].text
# method to get the price of gold def gold_price():
# getting the request from url
data = requests.get(
# converting the text
soup = BeautifulSoup(data.text, 'html.parser' )
# finding meta info for the current price
price = soup.find( "div" , class_ = "gold_silver_table right-align-content" ).find(
"tr" , class_ = "odd_row" ).findAll( "td" )
# returning the price in text
return price[ 1 ].text
# Get price for a particular weight def change_price(weight_value):
g_price = float (weight_value) * get_number_from_string(gold_price())
s_price = float (weight_value) * get_number_from_string(silver_price())
silver_price_label.config(text = f "{s_price} Rs" )
gold_price_label.config(text = f "{g_price} Rs" )
# Create Object root = Tk()
# Set Geometry root.geometry( "400x400" )
# Create Label Label(root, text = "SILVER AND GOLD PRICE" , font = (
"Helvetica 15 bold" ), fg = "blue" ).pack()
# Frame1 frame1 = Frame(root)
frame1.pack(pady = 20 )
Label(frame1, text = "Today Date:- " , font = ( "Helvetica 15 bold" )).pack(side = LEFT)
Label(frame1, text = today, font = ( "Helvetica 15" )).pack()
# Frame2 frame2 = Frame(root)
frame2.pack(pady = 20 )
# Set Variable variable = StringVar(root)
variable. set ( "1" )
Label(frame2, text = "Select Weight:- " ,
font = ( "Helvetica 15 bold" )).pack(side = LEFT)
w = OptionMenu(frame2, variable, "1" , "8" , "100" ,
"500" , "1000" , command = change_price)
w.pack(side = LEFT)
Label(frame2, text = "gm" , font = ( "Helvetica 15" )).pack(side = LEFT)
# Frame3 frame3 = Frame(root)
frame3.pack() Label(frame3, text = "Silver Price:- " , font = ( "Helvetica 15 bold" )).pack(side = LEFT)
silver_price_label = Label(frame3, text = " ", font=(" Helvetica 15 "))
silver_price_label.pack(pady = 20 )
# Frame4 frame4 = Frame(root)
frame4.pack() Label(frame4, text = "Gold Price:- " , font = ( "Helvetica 15 bold" )).pack(side = LEFT)
gold_price_label = Label(frame4, text = " ", font=(" Helvetica 15 "))
gold_price_label.pack(pady = 20 )
# Execute Tkinter root.mainloop() |
Output: