'''
1.네이버 검색창에 '{지역} 날씨' 형태로 검색하기
2.검색된 페이지로 와서 날씨 정보 파싱
'''
'''
1.현재온도
2.현재 날씨 상태(맑음, 흐림, 비 등등의 키워드)
3.미세먼지 정도
4.초미세먼지 정도
5.자외선 정도
6.현재 날씨 상태에 대한 이미지 URL
'''
내가 작성한 코드문
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
import time, re
import requests
import json
'''
1.네이버 검색창에 '{지역} 날씨' 형태로 검색하기
2.검색된 페이지로 와서 날씨 정보 파싱
'''
'''
1.현재온도
2.현재 날씨 상태(맑음, 흐림, 비 등등의 키워드)
3.미세먼지 정도
4.초미세먼지 정도
5.자외선 정도
6.현재 날씨 상태에 대한 이미지 URL
'''
driver = webdriver.Chrome()
driver.get("https://www.naver.com/")
time.sleep(1)
# 1.네이버 검색창에 '{지역} 날씨' 형태로 검색하기
지역 = input("콘솔창에 검색하고자 하는 날씨를 입력하세요: ")
query = driver.find_element(By.XPATH, '//*[@id="query"]')
query.send_keys(f"{지역}날씨")
search_btn = driver.find_element(By.CSS_SELECTOR, "button.btn_search")
search_btn.click()
time.sleep(2) # 딜레이 없어서 weather = []로 추출된 현상이 있었음
# 2.검색된 페이지로 와서 날씨 정보 파싱
html = driver.page_source # 셀레니움에서 추출한 url
bs = BeautifulSoup(html, "html.parser")
weather = bs.select_one("div.weather_info div.status_wrap")
today_weather = weather.select_one("div._today")
temp = today_weather.select_one("div.temperature_text strong").get_text(strip=True) # 1.현재온도
status = today_weather.select_one("span.weather").get_text(strip=True) # 2.현재 날씨 상태(맑음, 흐림, 비 등등의 키워드)
# print(f"{temp} {status}")
card_weather = bs.select("ul.today_chart_list")
fine_dust = card_weather[0].select_one("ul.today_chart_list li:nth-child(1)").get_text(strip=True) # 3.미세먼지 정도
ultra_fine_dust = card_weather[0].select_one("ul.today_chart_list li:nth-child(2)").get_text(strip=True) # 4.초미세먼지 정도
ultraviolet_rays = card_weather[0].select_one("ul.today_chart_list li.item_today.level2 span").get_text(strip=True) # 5.자외선 정도
# 1. 일단 i태그 클래스 값 추출 000_000 형식으로 나올거임
icon_tag = weather.select_one("i.wt_icon")["class"][1] # <i class="wt_icon ico_wt2"><span class="blind">맑음</span></i>
print(icon_tag)# ico_wt2
# 2. split 활용후 _뒤의 문자열 추출
icon_code = icon_tag.split("_")[1]
# 3. 이미지 url 이있고 f.string 활용해서 추출한 문자열을 그 링크에 넣는다.
url = f"https://ssl.pstatic.net/sstatic/keypage/outside/scui/weather_new_new/img/weather_svg_v2/icon_flat_{icon_code}.svg"
time.sleep(2) # 렌더링 대기
weather_data = {
"지역": 지역,
"날씨": {
"현재 온도": temp,
"아이콘 식별자(클래스)": url,
"날씨 상태": status,
"미세먼지": fine_dust,
"초미세먼지": ultra_fine_dust,
"자외선": ultraviolet_rays
}
}
json_output = json.dumps(weather_data, ensure_ascii=False, indent=2)
print(json_output)
input("엔터를 누르면 창이 닫힙니다.")
많이 코드문이 러프하긴 하다.
출력결과
콘솔창에 검색하고자 하는 날씨를 입력하세요: 도봉
ico_wt2
{
"지역": "도봉",
"날씨": {
"현재 온도": "현재 온도8.8°",
"아이콘 식별자(클래스)": "https://ssl.pstatic.net/sstatic/keypage/outside/scui/weather_new_new/img/weather_svg_v2/icon_flat_wt2.svg",
"날씨 상태": "맑음",
"미세먼지": "미세먼지보통",
"초미세먼지": "초미세먼지보통",
"자외선": "자외선좋음"
}
}
엔터를 누르면 창이 닫힙니다.