아래와 같이 기상청 날씨누리에 들어가면 연도별, 지역별 황사관측일수 데이터를 볼 수 있다.
파이썬을 이용해 표에 있는 데이터를 엑셀로 가져와 보자.
아래 코드를 실행하면 날 것 그대로의 데이터를 엑셀 파일을 얻을 수 있다.
import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook
wb = Workbook(write_only=True)
ws = wb.create_sheet('duststorm_count')
ws.append(['구분', '1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'])
response = requests.get("https://www.weather.go.kr/w/dust/dust-obs-days.do", verify = False)
duststorm_page = response.text
soup = BeautifulSoup(duststorm_page, 'html.parser')
for tr_tag in soup.select('tr')[1:]:
th_tag = tr_tag.select('th')
td_tags = tr_tag.select('td')
row = [
th_tag[0].get_text(), # 구분
td_tags[0].get_text(), # 1월
td_tags[1].get_text(), # 2월
td_tags[2].get_text(), # 3월
td_tags[3].get_text(), # 4월
td_tags[4].get_text(), # 5월
td_tags[5].get_text(), # 6월
td_tags[6].get_text(), # 7월
td_tags[7].get_text(), # 8월
td_tags[8].get_text(), # 9월
td_tags[9].get_text(), # 10월
td_tags[10].get_text(), # 11월
td_tags[11].get_text(), # 12월
]
ws.append(row)
wb.save('연도별 황사관측일수.xlsx')
위 코드를 실행했을 때 아래와 같은 엑셀 데이터를 얻을 수 있다.
이제 코드를 해석해 보자.
import requests # requests 라이브러리를 가져와.(웹페이지 내용을 가져오는 데 사용할거야)
from bs4 import BeautifulSoup # bs4 모듈에서 BeautifulSoup 클래스를 가져와.(웹 페이지의 데이터를 추출하는 데 사용 할거야)
from openpyxl import Workbook # openpyxl 라이브러리에서 Workbook 클래스를 가져와.(액셀 파일을 생성하려고 해)
wb = Workbook(write_only=True) # Workbook 클래스를 사용해 새로운 엑셀 워크북을 생성하고 쓰기 전용 모드로 설정해.
ws = wb.create_sheet('duststorm_count') # 위에서 생성한 액셀 워크북(wb)에 'duststorm_count'라는 이름의 새로운 워크시트를 생성해.
ws.append(['구분', '1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월']) # 워크시트(ws)에 첫 번째 행으로 '구분'과 각 월(1월부터 12월)을 나타내는 열 제목을 추가해.
response = requests.get("https://www.weather.go.kr/w/dust/dust-obs-days.do", verify=False) # requests 라이브러리를 사용하여 주어진 URL로 HTTP GET 요청을 보내서 웹 페이지 내용을 가져와. SSL 인증서 검증은 비활성화 하고.
duststorm_page = response.text # 웹 페이지의 내용을 가져와서 duststorm_page 변수에 저장해.
soup = BeautifulSoup(duststorm_page, 'html.parser') # BeautifulSoup을 사용하여 duststorm_page의 HTML을 파싱해.
for tr_tag in soup.select('tr')[1:]: # BeautifulSoup을 사용하여 웹 페이지의 모든 <tr>(테이블 행) 태그를 선택해.(첫 번째 행은 테이블의 헤더 행이니까 제외하고 나머지 행들만 선택하면 돼)
th_tag = tr_tag.select('th') # 각 행에서 <th>(테이블 헤더 셀) 태그를 선택해.('구분'열을 나타내는 셀을 선택하면 돼)
td_tags = tr_tag.select('td') # 각 행에서 <td>(테이블 데이터 셀) 태그를 선택해.(각 월(1월부터 12월)에 해당하는 데이터 셀을 선택하면 돼)
row = [ # 각 월의 데이터를 row라는 리스트에 저장해.(각 셀의 텍스트 내용을 get_text() 메서드로 가져와서 row 리스트에 추가하면 돼)
th_tag[0].get_text(), # 구분 # th_tag는 '구분' 셀이야.
td_tags[0].get_text(), # 1월 # td_tags는 1월부터 12월까지의 데이터 셀이야.
td_tags[1].get_text(), # 2월
td_tags[2].get_text(), # 3월
td_tags[3].get_text(), # 4월
td_tags[4].get_text(), # 5월
td_tags[5].get_text(), # 6월
td_tags[6].get_text(), # 7월
td_tags[7].get_text(), # 8월
td_tags[8].get_text(), # 9월
td_tags[9].get_text(), # 10월
td_tags[10].get_text(), # 11월
td_tags[11].get_text(), # 12월
]
wb.save('연도별 황사관측일수.xlsx') # 위에서 구성한 row 리스트를 워크시트(ws)에 추가해.(각 연도별로 월별 데이터가 엑셀 파일에 추가되는거야)
wb.save('연도별 황사관측일수.xlsx') # 작성한 워크북(wb)을 '연도별 황사관측일수.xlsx'라는 이름의 엑셀 파일로 저장해.
반응형
'배움의 일상' 카테고리의 다른 글
[python] 네이버 최신 뉴스 60개 제목과 링크 추출하기 (0) | 2023.09.30 |
---|---|
[googleApps] 구글캘린더 일정을 구글시트로 가져오기 (0) | 2023.09.29 |
미분을 이용한 근사값 구하기 (0) | 2022.11.09 |
역사와 영화_과거편(20221030 업데이트) (2) | 2022.10.30 |
순열과 조합 (0) | 2021.11.12 |