Coordinates / app.py
Tobaisfire's picture
Rename coor.py to app.py
98e58f0
import streamlit as st
import pandas as pd
from seleniumwire import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
import time
import shutil
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--ignore-certificate-errors-spki-list')
chrome_options.add_argument('--ignore-ssl-errors')
chrome_options.add_argument('log-level=3')
# CHROMEDRIVER_PATH = 'chromedriver.exe'
def get_chromedriver_path():
return shutil.which('chromedriver')
service = Service(executable_path=get_chromedriver_path())
driver = webdriver.Chrome(service=service, options=chrome_options)
def get_address(search_term):
lat, lon = [], []
try:
print('HIT.......')
driver.get("https://www.google.com/maps")
time.sleep(3)
driver.find_element(By.ID, "searchboxinput").send_keys(search_term)
driver.find_element(By.ID, "searchbox-searchbutton").click()
time.sleep(4)
url = driver.current_url
if '!3d' in url:
print('--------------------------coor-----------------------------------')
url = url.split('!3d')[1]
url = url.split('!4d')
lat.append(url[0])
lon.append(url[1].split('!')[0])
return lat[0], lon[0]
else:
time.sleep(0.25)
f2 = driver.find_elements(By.XPATH, '//a')[1:]
if f2:
for k in f2:
if k.get_attribute('aria-label') is None:
continue
if search_term in k.get_attribute('aria-label'):
print('-------------------jump------------------------------')
k.click()
time.sleep(2.5)
url = driver.current_url
if '!3d' in url:
url = url.split('!3d')[1]
url = url.split('!4d')
lat.append(url[0])
lon.append(url[1].split('!')[0])
break
else:
print('------------------------none--------------------------')
lat.append('0')
lon.append('0')
break
return lat[0], lon[0]
else:
print('------------------------fatal none--------------------------')
lat.append('0')
lon.append('0')
time.sleep(0.6)
return lat[0], lon[0]
except Exception as e:
# print("5 error")
return e
def main():
st.title("Address Finder")
uploaded_file = st.file_uploader("Choose a CSV file", type=["csv"])
if uploaded_file is not None:
df = pd.read_csv(uploaded_file)
st.write("Process Started wait till progress Bar Start ! Note: 0 is Mutliple Location Error" )
latitudes, longitudes = [], []
add = df['address'].to_list()
# Create progress bar
progress_bar = st.progress(0)
progress_text = st.empty()
processed_data = []
for row in range(len(add)):
try:
result = get_address(add[row])
print('HIT Over....')
if type(result) == str:
st.error(f'{result}')
break
latitudes.append(float(result[0]))
longitudes.append(float(result[1]))
# Update progress bar
progress_value = (row + 1) / len(df['address'])
progress_bar.progress(progress_value)
progress_text.text(f"Progress: {int(progress_value * 100)}%")
# Add to processed_data
processed_data.append({'Address': add[row], 'latitudes': result[0], 'Longitudes': result[1]})
# Display df2 on the side
st.sidebar.title("Processed Data (df2)")
st.sidebar.write(pd.DataFrame(processed_data))
except Exception as e:
st.error(f'Error processing row {row + 1}: {str(e)}')
break
# Create df2 DataFrame
df2 = pd.DataFrame(processed_data)
st.success("Processing completed!")
st.write("Final Processed Data:")
st.write(df2)
if __name__ == '__main__':
main()