from bs4 import BeautifulSoup import csv import requests import numpy as np import pandas as pd import os import datetime from tensorflow import keras import subprocess def getdata(): #------------------------GETTING HTML TABLE DATA--------------------------- url = f'https://ltp.investingdaddy.com/detailed-options-chain.php' response = requests.get(url) if response.status_code == 200: html_source = response.text #print(html_source) else: print(f"Failed to retrieve the webpage. Status code: {response.status_code}") #------------------------FILTERING TABLE DATA------------------------------- soup = BeautifulSoup(html_source, 'html.parser') tables = soup.find_all('table') ##price = soup.find('label', {'id':'future_val'}) ##price = price.text ##prices.append(price) ##return if len(tables) >= 2: second_table = tables[1] else: print("There are not enough tables in the HTML source.") #-----------------------CONVERTING HTML TABLE DATA TO CSV-------------------- html_content = ""+str(second_table)+"" soup = BeautifulSoup(html_content, 'html.parser') table = soup.find('table', {'id': 'tech-companies-1'}) table_data = [] rows = table.find_all('tr') for row in rows: row_data = [] cols = row.find_all(['th', 'td']) for col in cols: row_data.append(col.get_text(strip=True)) table_data.append(row_data) csv_file = 'sample.csv' r=False with open(csv_file, 'w', newline='') as csvfile: csv_writer = csv.writer(csvfile) for row_data in table_data: if r: csv_writer.writerow(row_data) else: r=True print(f'Table data has been successfully written to {csv_file}.') def get_his_data(m,d,h,min): #------------------------GETTING HTML TABLE DATA--------------------------- url = f'https://ltp.investingdaddy.com/historical-option-chain.php?symbol=NIFTY&expiry=2023-09-07&filterdate1=2023-09-04&filtertime=09%3A15&filterdate=2023-{m}-{d}T{h}%3A{min}' response = requests.get(url) if response.status_code == 200: html_source = response.text #print(html_source) else: print(f"Failed to retrieve the webpage. Status code: {response.status_code}") #------------------------FILTERING TABLE DATA------------------------------- soup = BeautifulSoup(html_source, 'html.parser') tables = soup.find_all('table') ##price = soup.find('label', {'id':'future_val'}) ##price = price.text ##prices.append(price) ##return if len(tables) >= 2: second_table = tables[1] else: print("There are not enough tables in the HTML source.") #-----------------------CONVERTING HTML TABLE DATA TO CSV-------------------- html_content = ""+str(second_table)+"" soup = BeautifulSoup(html_content, 'html.parser') table = soup.find('table', {'id': 'tech-companies-1'}) table_data = [] rows = table.find_all('tr') for row in rows: row_data = [] cols = row.find_all(['th', 'td']) for col in cols: row_data.append(col.get_text(strip=True)) table_data.append(row_data) csv_file = 'sample.csv' r=False with open(csv_file, 'w', newline='') as csvfile: csv_writer = csv.writer(csvfile) for row_data in table_data: if r: csv_writer.writerow(row_data) else: r=True print(f'historical Table data has been successfully written to {csv_file}.') def changedatashape(): # Load your CSV data into a Pandas DataFrame df = pd.read_csv('sample.csv') # Replace 'your_data.csv' with your actual file path # Check the shape of the original DataFrame (it should be 20x20) #print("Original DataFrame Shape:", df.shape) # Convert the DataFrame into a NumPy array data = df.to_numpy() # Reshape the data into a 1D array and transpose it horizontal_data = data.flatten().reshape(1, -1) # Check the shape of the reshaped data (it should be 1x400) #print("Horizontal Data Shape:", horizontal_data.shape) # If you want to save this reshaped data to a new CSV file: horizontal_df = pd.DataFrame(horizontal_data) # Save it to a new CSV file without row or column labels horizontal_df.to_csv('sample2.csv', index=False, header=False) os.remove('sample.csv') def predict(m,historical=True): if historical: date = input('date:') hour = input('hour:') min = input('min') get_his_data(m,date,hour,min) else: getdata() changedatashape() # Specify the path to your CSV file csv_file_path = 'sample2.csv' # Read the existing data to determine the number of columns and rows with open(csv_file_path, 'r') as csv_file: reader = csv.reader(csv_file) data = list(reader) num_columns = len(data[0]) if data else 0 num_rows = len(data) # Generate the header row for the new column new_column_header = 'sample names' # Generate the values for the new column new_column_values = ['sample{}'.format(i-1) for i in range(1, num_rows + 1)] # Insert the new column into the data for i in range(num_rows): data[i].insert(0, new_column_values[i]) # Write the modified data back to the file with open(csv_file_path, 'w', newline='') as csv_file: writer = csv.writer(csv_file) writer.writerow([new_column_header] + ['feature{}'.format(i+1) for i in range(1, num_columns + 1)]) writer.writerows(data) if st.button("Generate Text"): predict(historical=False)