인프런 커뮤니티 질문&답변

이정완님의 프로필 이미지
이정완

작성한 질문수

파이썬 무료 강의 (활용편3) - 웹 스크래핑 (5시간)

오늘의 날씨 (네이버 날씨)

2024.08.28 수요일 기준 날씨 정보 가져오기 소스코드입니다 (참고하세요 : ) )

작성

·

47

0

개인적으로 만든거다 보니, 부족한 면이 많습니다.

헷갈리시는 분들이나 조금 어렵다고 느껴지는 분들을 위해서 공유해드려요 !

import requests
from bs4 import BeautifulSoup

'''
[오늘의 날씨]
흐림, 어제보다 00도 높아요
현재 00도 (최저 00도 / 최고 00도)
오전 강수확률 00% / 오후 강수확률 00%

미세먼지 좋음
초미세먼지 좋음
'''

def scrape_weather():
    print("[오늘의 날씨]")
    url = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=%EB%82%A0%EC%94%A8"
    res = requests.get(url)
    res.raise_for_status()
    soup = BeautifulSoup(res.text, "lxml")

    cast = soup.find("p", class_="summary").get_text()

    curr_temp = soup.find("div", class_="temperature_text").get_text().replace("현재 온도", "") # 현재온도
    targets = soup.find_all("li", class_="week_item today")

    min_temp = targets[0].find("span", class_="lowest").get_text() # 최저 온도
    max_temp = targets[0].find("span", class_="highest").get_text() # 최고 온도

    morning_and_afternoon = targets[0].find_all("span", class_="weather_left")

    morning_rain_rate = morning_and_afternoon[0].get_text() #  오전 강수확률
    afternoon_rain_rate = morning_and_afternoon[1].get_text() # 오후 강수확률

    dust_list = soup.find_all("li", class_="item_today")

    pm10 = dust_list[0].get_text() # 미세먼지
    pm25 = dust_list[1].get_text() # 초미세먼지


    # 출력
    print(cast)
    print(f"현재 {curr_temp} ({min_temp} / {max_temp})")
    print(f"강수확률 {morning_rain_rate.strip()} / {afternoon_rain_rate.strip()}")
    print()
    print(f"{pm10.strip()}")
    print(f"{pm25.strip()}")
    print()

if __name__ == "__main__":
    scrape_weather() # 오늘의 날씨 정보 가져오기

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

님의 코드는 Naver로부터 웹 페이지의 HTML을 가져와 BeautifulSoup을 사용하여 웹 스크래핑을 진행하는 파이썬 스크립트입니다. 이 스크립트는 날씨 정보를 추출하여 출력하는 기능을 수행합니다. BeautifulSoup와 requests 라이브러리를 사용하여 웹의 HTML을 파싱하고, 특정 HTML 요소에서 텍스트 정보를 추출하여 현재 날씨, 최저/최고 온도, 강수 확률, 미세먼지 및 초미세먼지 수준을 출력합니다.

웹 스크래핑에 관심이 있으시다면 더 많은 BeautifulSoup의 기능과 선택자를 활용하는 방법, 그리고 HTML 구조가 변경되었을 시 대처 방안 등을 공부해 보시는 것도 좋을 것 같습니다.

질문이 있으시다면 언제든지 문의해 주세요!

이정완님의 프로필 이미지
이정완

작성한 질문수

질문하기