Advertisement
Guest User

Untitled

a guest
Mar 30th, 2017
173
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.66 KB | None | 0 0
  1. import requests
  2. import pandas
  3. from bs4 import BeautifulSoup
  4.  
  5. leapYears = {1904, 1908, 1912, 1916, 1920, 1924, 1928, 1932, 1936, 1940, 1944,
  6.              1948, 1952, 1956, 1960, 1964, 1968, 1972, 1976, 1980, 1984, 1988,
  7.              1992, 1996, 2000, 2004, 2008, 2012, 2016, 2020}
  8. tempDFList = []
  9.  
  10. def getTemperature(year, month, day):
  11.     # Use BeautifulSoup to parse the temperature from Wunderground page
  12.     url = ('https://www.wunderground.com/history/airport/KSFO/'+str(year)+'/'+str(month)+'/'\
  13.             +str(day)+'/DailyHistory.html?req_city=San+Francisco&req_state=CA&req_statename=\
  14.            California&reqdb.zip=94102&reqdb.magic=1&reqdb.wmo=99999')
  15.     r = requests.get(url, headers={'user-agent': 'Mozilla/5.0'})
  16.     soup = BeautifulSoup(r.content, 'html.parser')
  17.     value = soup.select_one('.wx-value')
  18.     fullTemp = [year, month, day, value.string]
  19.     return fullTemp
  20.  
  21. def temperatureSpan(startYear, endYear):
  22.     temperatureList = [] # List to store yearly temperature values, gets reset to blank after each year
  23.     for currentYear in range(startYear, endYear+1): # Loops through input year range
  24.         print(currentYear)
  25.         for currentMonth in range(1, 13): # Loops through all months in a year
  26.             print(currentMonth)
  27.             if currentMonth == 1: # January
  28.                 for currentDay in range(1, 32): # Parse daily temperature
  29.                     print(currentDay)
  30.                     dailyTemp = getTemperature(currentYear, currentMonth, currentDay)
  31.                     temperatureList.append(dailyTemp)
  32.             if currentMonth == 2: # February
  33.                 if currentYear in leapYears:
  34.                     for currentDay in range(1, 30): # Parse daily temperature
  35.                         print(currentDay)
  36.                         dailyTemp = getTemperature(currentYear, currentMonth, currentDay)
  37.                         temperatureList.append(dailyTemp)
  38.                 else:
  39.                     for currentDay in range(1, 29):
  40.                         print(currentDay)
  41.                         dailyTemp = getTemperature(currentYear, currentMonth, currentDay)
  42.                         temperatureList.append(dailyTemp)
  43.             if currentMonth == 3: # March
  44.                 for currentDay in range(1, 32): # Parse daily temperature
  45.                     print(currentDay)
  46.                     dailyTemp = getTemperature(currentYear, currentMonth, currentDay)
  47.                     temperatureList.append(dailyTemp)
  48.             if currentMonth == 4: # April
  49.                 for currentDay in range(1, 31): # Parse daily temperature
  50.                     print(currentDay)
  51.                     dailyTemp = getTemperature(currentYear, currentMonth, currentDay)
  52.                     temperatureList.append(dailyTemp)
  53.             if currentMonth == 5: # May
  54.                 for currentDay in range(1, 32): # Parse daily temperature
  55.                     print(currentDay)
  56.                     dailyTemp = getTemperature(currentYear, currentMonth, currentDay)
  57.                     temperatureList.append(dailyTemp)
  58.             if currentMonth == 6: # June
  59.                 for currentDay in range(1, 31): # Parse daily temperature
  60.                     print(currentDay)
  61.                     dailyTemp = getTemperature(currentYear, currentMonth, currentDay)
  62.                     temperatureList.append(dailyTemp)
  63.             if currentMonth == 7: # July
  64.                 for currentDay in range(1, 32): # Parse daily temperature
  65.                     print(currentDay)
  66.                     dailyTemp = getTemperature(currentYear, currentMonth, currentDay)
  67.                     temperatureList.append(dailyTemp)
  68.             if currentMonth == 8: # August
  69.                 for currentDay in range(1, 32): # Parse daily temperature
  70.                     print(currentDay)
  71.                     dailyTemp = getTemperature(currentYear, currentMonth, currentDay)
  72.                     temperatureList.append(dailyTemp)
  73.             if currentMonth == 9: # September
  74.                 for currentDay in range(1, 31): # Parse daily temperature
  75.                     print(currentDay)
  76.                     dailyTemp = getTemperature(currentYear, currentMonth, currentDay)
  77.                     temperatureList.append(dailyTemp)
  78.             if currentMonth == 10: # October
  79.                 for currentDay in range(1, 31): # Parse daily temperature
  80.                     print(currentDay)
  81.                     dailyTemp = getTemperature(currentYear, currentMonth, currentDay)
  82.                     temperatureList.append(dailyTemp)
  83.             if currentMonth == 11: # November
  84.                 for currentDay in range(1, 31): # Parse daily temperature
  85.                     print(currentDay)
  86.                     dailyTemp = getTemperature(currentYear, currentMonth, currentDay)
  87.                     temperatureList.append(dailyTemp)
  88.             if currentMonth == 12: # December
  89.                 for currentDay in range(1, 32): # Parse daily temperature
  90.                     print(currentDay)
  91.                     dailyTemp = getTemperature(currentYear, currentMonth, currentDay)
  92.                     temperatureList.append(dailyTemp)
  93.         # Temporary data frames to store data for a single year, appended onto overall list
  94.         df_temp = pandas.DataFrame(temperatureList)
  95.         tempDFList.append(df_temp)
  96.         del temperatureList[:]
  97. def main():
  98.     temperatureSpan(1950, 1955) # Parse temperatures for input range of years
  99.  
  100.     # Use pandas to output temperature values into a .csv file
  101.     dfTempFinal = pandas.concat(tempDFList)
  102.     dfTempFinal.columns = ['Year', 'Month', 'Day', 'Mean Temperature']
  103.     dfTempFinal.to_csv("temperature_data_1953-1954.csv", index=False)
  104.  
  105. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement