text 를 가져옴 temperature = tds[5].text # 기온 humidity = tds[9].text # 습도 data.append([point, temperature, humidity]) # data에 [지역, 기온, 습도] 추가 data"> text 를 가져옴 temperature = tds[5].text # 기온 humidity = tds[9].text # 습도 data.append([point, temperature, humidity]) # data에 [지역, 기온, 습도] 추가 data"> text 를 가져옴 temperature = tds[5].text # 기온 humidity = tds[9].text # 습도 data.append([point, temperature, humidity]) # data에 [지역, 기온, 습도] 추가 data">
import requests
from bs4 import BeautifulSoup

# 웹페이지 가져오기
response = requests.get("<https://www.weather.go.kr/weather/observation/currentweather.jsp>")
# BeautifulSoup 객체로 만들기
soup = BeautifulSoup(response.content, 'html.parser')

# <table class = "table_develop3" 찾기
table = soup.find('table', {'table_develop3'})

# 데이터 리스트 작성
data = [] # 데이터 넣을 리스트 생성

for tr in table.find_all('tr'): # 모든 tr(가로줄) 찾기
    tds = list(tr.find_all('td')) # 모든 td(세로줄) 리스트 만들기
    
    for td in tds : # 모든 td(세로줄) 찾기
        if td.find('a') : # td에서 a 태그를 찾으면
            point = td.find('a').text # a테그 <a>text</a> 를 가져옴
            temperature = tds[5].text # 기온
            humidity = tds[9].text # 습도
            data.append([point, temperature, humidity]) # data에 [지역, 기온, 습도] 추가
data

웹에서 가져온 데이터 CSV파일로 저장하기

with open("weather.csv", "w") as file : # 파일 쓰기
    file.write("point,temperature,humidity\\n") # 맨 윗줄 이름 추가(빈칸 없게)
    for i in data : 
        file.write("{},{},{}\\n".format(i[0], i[1], i[2])) # 두번째 줄부터 지역,기온,습도 작성

CSV파일 가져와 pandas의 데이터프레임으로 만들기

# 그래프 그리기
%matplotlib inline # import 하지 않고 그래프 표기 가능
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

#  csv파일로 데이터프레임 객체 만듦
df = pd.read_csv("weather.csv", index_col = "point", encoding = "euc-kr")
df 

특별시 광역시만 모아 새로 데이터프레임 작성(필터링)

city_df = df.loc[["서울", "인천", "대전", "대구", "광주", "부산", "울산"]]
city_df

새로운 데이터 프레임으로 그래프 작성

# 한글깨짐 방지 폰트 설정
mpl.rc("font", family = "NanumGothic")

# 차트
ax = city_df.plot(kind = 'bar', title = "날씨", figsize = (12, 4), legend = True, fontsize = 12)
ax.set_xlabel('도시', fontsize = 12)
ax.set_ylabel('기온/습도', fontsize = 12)
ax.legend(['기온', '습도'], fontsize = 12)