[Tutorial] How to Build Your Own Weather Reporting App
(Currently working on this article - come back later!)
Almost four years ago, I remember during my very first internship I fell in love with coding. Undeniably, if you have ever attempted to write any kind of software, you know how fustrating yet rewarding the experience can be. Aside from my academic research that requires a major part of my time analyzing data with coding, I actually think that a more common practice of writing software can be very handy.
This is the most common question I am asked; how did you learn Python?
- Learn how to utilize basic webscraping tools
- How t
def forecast_zip(zip_customer): """Given a user zip-code, return some general weather summary statistics. Input ----- zip_customer (str): Zip-code location Output ----- index=0 (float): Median daily temperature index=1 (float): Minimum daily temperature index=2 (float): Maximum daily temperature index=3 (float): Median chance of rain index=4 (float): Minimum chance of rain index=5 (float): Maximum chance of rain """ # Define path to chromedriver.exe PATH="ENTER_YOUR_PATH_HERE" HOST_WEBSITE = "https://www.wxyz.com/weather" # website we will be scraping # Open url path with google chrome driver = webdriver.Chrome(PATH) driver.get(host_website) # Navigate search bar and search desired zipcode search = driver.find_element_by_class_name("wxByLocation-ziporcity") # Sent text to the search bar search.send_keys(zip_customer) # search zip code search.send_keys(Keys.RETURN) # sent ENTER to website snooz() # Navigate daily forecast by the CSS location hr = driver.find_element_by_css_selector('body > div.Page-wrap > div > div.Weather.top > div.top-three > a:nth-child(1)') hr.click() # click snooz() # Find forecast tabs forecast = driver.find_elements_by_class_name("HourlyForecast") snooz() # snooz again... fd = fr.text for fr in forecast # assign fd as your HTML text variable snooz() week_day_today = find_weekday(date.today()) # Find the day of the week for the current date of your query print ("You have selected as your week day: %s"%week_day_today) snooz() temp, rain = ,  for i in range (0, len(fd.split(" "))): val = fd.split(" ")[i].split() # break each category by element # if the N_val=5: 0:condition, 1:temp, 2:percp. 3:day, 4:time if len(val)==5: # select the data structure with data in day_val = val # day of the week if day_val==week_day_today: temp_val = float(val.split("°")) rain_val = float(val.split("%")) temp.append(temp_val) rain.append(rain_val) elif len(val)==6: # alternative structure... day_val = val # day of the week if day_val==week_day_today: temp_val = float(val.split("°")) rain_val = float(val.split("%")) temp.append(temp_val) rain.append(rain_val) temp, rain = np.array(temp), np.array(rain) return (np.median(temp), min(temp), max(temp), np.median(rain), min(rain), max(rain))
Note that the
snooz() function is a simple time function that waits for 2 seconds before moving to the next action.