본문 바로가기

웹페이지 HTML자료를 가져와서 그래프 그리기 본문

Python

웹페이지 HTML자료를 가져와서 그래프 그리기

Data to Knowledge 2020. 2. 2. 23:44

기상청 웹사이트에서 도시별 날씨를 그래프로 나타내는 방법을 살펴보도록 한다. 이 내용은 [파이썬 코딩 도장] pp.704~718에 수록된 내용이다.

- 기상청 도시별 현재날씨 싸이트: https://www.weather.go.kr/weather/observation/currentweather.jsp

1. 기상청 웹사이트는 시간이 지나면 개편될 수 있어 책의 내용이 저장되어 있는 URL을 사용한다.

Bitbucket 도시별 현재날씨 페이지
https://pythondojang.bitbucket.io/weather/observation/currentweather.html

2. Jupyter에서 다음과 같이 입력을 한다.

import requests # 웹 페이지의 HTML을 가져오는 모듈

from bs4 import BeautifulSoup # HTML을 파싱하는 모듈

# 웹 페이지를 가져온 뒤 BeautifulSoup 객체로 만듦

response = requests.get('https://pythondojang.bitbucket.io/weather/observation/currentweather.html')

soup = BeautifulSoup(response.content, 'html.parser')

table = soup.find('table', { 'class': 'table_develop3' }) # <table class="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> 태그 안에서 지점을 가져옴

        temperature = tds[5].text # <td> 태그 리스트의 여섯 번째(인덱스 5)에서 기온을 가져옴

        humidity = tds[9].text # <td> 태그 리스트의 열 번째(인덱스 9)에서 습도를 가져옴

        data.append([point, temperature, humidity]) # data 리스트에 지점, 기온, 습도를 추가

data # data 표시. 주피터 노트북에서는 print를 사용하지 않아도 변수의 값이 표시됨

3. 데이터를 csv파일로 저장한다.

with open('weather.csv', 'w') as file:    # weather.csv 파일을 쓰기 모드로 열기
    file.write('point,temperature,humidity\n')                  # 컬럼 이름 추가
    for i in data:                                                      # data를 반복하면서
        file.write('{0},{1},{2}\n'.format(i[0], i[1], i[2]))           # 지점,온도,습도를 줄 단위로 저장

4. 데이터 추출하기

# %matplotlib inline을 설정하면 matplotlib.pyplot의 show 함수를 호출하지 않아도
# 주피터 노트북 안에서 그래프가 표시됨
%matplotlib inline
import pandas as pd                # 데이터를 저장하고 처리하는 패키지
import matplotlib as mpl           # 그래프를 그리는 패키지
import matplotlib.pyplot as plt    # 그래프를 그리는 패키지
 
# csv 파일을 읽어서 DataFrame 객체로 만듦. 인덱스 컬럼은 point로 설정
df = pd.read_csv('weather.csv', index_col='point', encoding='euc-kr')
df    # df 표시

 

5. 주요 도시만 선정하기

# 특별시, 광역시만 모아서 DataFrame 객체로 만듦

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

city_df    # city_df 표시

6. 그래프 그리기: 다음과 같은 스크립트를 작성하면 주요 도시별 온도와 습도를 확인할 수 있다.

# Windows 한글 폰트 설정
font_name = mpl.font_manager.FontProperties(fname='C:/Windows/Fonts/malgun.ttf').get_name()
mpl.rc('font', family=font_name)
 
# 차트 종류, 제목, 차트 크기, 범례, 폰트 크기 설정
ax = city_df.plot(kind='bar', title='날씨', figsize=(12, 4), legend=True, fontsize=12)
ax.set_xlabel('도시', fontsize=12)          # x축 정보 표시
ax.set_ylabel('기온/습도', fontsize=12)     # y축 정보 표시
ax.legend(['기온', '습도'], fontsize=12)    # 범례 지정

 

[자료] 남재윤(2019), 파이썬 코딩 도장, 길벗, pp.704~718.

'Python' 카테고리의 다른 글

Lambda, Split, List, Map함수  (0) 2020.07.28
Comments