파이썬을 이용하면 쉽게 웹상의 데이터를 크롤링하고 분석할 수 있습니다.
이번에는 파이썬으로 날씨 정보를 받아와서 예보를 출력하는 간단한 프로그램을 작성해 보겠습니다.
이번 예제에서는 네이버 날씨를 크롤링하여 날씨 정보를 가져오고,
BeautifulSoup4 라이브러리를 이용하여 HTML 코드를 파싱합니다.
필요한 라이브러리 설치
우선 필요한 라이브러리를 설치합니다.
이번 예제에서는 requests와 BeautifulSoup4 라이브러리를 사용합니다.
pip를 이용하여 설치합니다.
pip install requests
pip install beautifulsoup4
네이버 날씨 페이지 크롤링
먼저, requests 라이브러리를 이용하여 네이버 날씨 페이지를 가져옵니다. 가져온 페이지의 HTML 코드를 BeautifulSoup4 라이브러리를 이용하여 파싱 합니다. 이후, 해당 페이지에서 필요한 데이터를 가져옵니다.
import requests
from bs4 import BeautifulSoup
url = 'https://search.naver.com/search.naver?query=날씨'
res = requests.get(url)
res.raise_for_status()
soup = BeautifulSoup(res.text, 'html.parser')
필요한 데이터 추출
위 코드를 실행하면 soup 객체에 HTML 코드가 저장됩니다. 이제 soup 객체를 이용하여 날씨 정보를 가져옵니다. 예를 들어, 현재 온도는 다음과 같이 추출할 수 있습니다.
개발도구로 열어보니 html 코드
<strong><span class="blind">현재 온도</span>11.6<span class="celsius">°</span></strong>
temp_tag = soup.select_one('.temperature_text strong')
temp = temp_tag.get_text(strip=True).replace('°', '')
이 외에도, 현재 날씨 상태, 미세먼지 농도 등 필요한 데이터를 추출할 수 있습니다.
예보 출력
이제 추출한 데이터를 이용하여 예보를 출력합니다. 예를 들어, 현재 온도와 날씨 상태를 출력하는 예제는 다음과 같습니다.
print('현재 온도: {}℃'.format(temp))
condition = soup.find('p', attrs={'class': 'cast_txt'}).get_text()
print('날씨 상태: {}'.format(desc))
전체 코드
위 코드를 합쳐 전체 코드는 다음과 같습니다.
import requests
from bs4 import BeautifulSoup
url = 'https://search.naver.com/search.naver?query=날씨'
res = requests.get(url)
res.raise_for_status()
soup = BeautifulSoup(res.text, 'html.parser')
temp_tag = soup.select_one('.temperature_text strong')
temp = temp_tag.get_text(strip=True).replace('°', '')
condition = soup.find('div', attrs={'class': 'weather_graphic'}).find('span', attrs={'class': 'blind'}).get_text()
print('현재 온도: {}℃'.format(temp))
print('날씨 상태: {}'.format(condition))
결과값:
결론
이번에는 파이썬으로 날씨 예보를 받아와서 출력하는 방법에 대해 알아보았습니다.
이 예제를 바탕으로 다양한 날씨 정보를 추출하여 활용할 수 있을 것입니다.
예를 들어, 매일 정해진 시간마다 해당 지역의 날씨 정보를 가져와서 슬랙 봇으로 전송하는 등의 활용이 가능합니다.
하지만, 크롤링을 이용한 날씨 정보 수집은 웹사이트 운영자의 정책에 따라 문제가 될 수 있습니다.
따라서, 해당 웹사이트의 이용 약관과 정책을 확인하고 합법적으로 이용하는 것이 중요합니다.
더불어, 네이버 날씨 페이지가 변경되면 코드가 정상적으로 작동하지 않을 수 있습니다.
->실시간 반영이 아닌 현재 뉴스에 찍혀있는 온도를 가져옵니다
이 경우, 코드를 수정하거나 다른 방법을 고민해야 할 것입니다.
'파이썬' 카테고리의 다른 글
파이썬으로 간단하게 웹사이트 모니터링 하는 방법 (0) | 2023.04.12 |
---|---|
파이썬 그래픽 라이브러리로 그래프 표현 (0) | 2023.04.11 |
Python Web Scraping: Step-by-Step Tutorial 웹사이트 스크래핑 (0) | 2023.04.05 |
[Python]#36 Python 프레임워크의 종류와 각각의 특징 (0) | 2023.04.04 |
[Python]#35 사용자를 위한 맞춤형 추천, Python과 협업 필터링으로 구현하는 방법 (0) | 2023.04.03 |