본문 바로가기
자동화/파이썬

[웹 크롤 + 엑셀] 날씨 가져와서 데이터 넣기

by 고준영_ 2022. 9. 14.

안녕하세요, 고준영입니다. 오늘은 beautifulsoup + openpyxl을 활용하여 날씨 가져오는 법을 알아보겠습니다.

군 복무 시절 아침마다 하는 일이 사령부 홈페이지에서 날씨 읽어와서 결산에 넣는 일이었는데요. 이참에 한번 해볼까 해서 만들었습니다.

 

from openpyxl import load_workbook
import requests
from bs4 import BeautifulSoup as bs

url = 'http://naver.com'  # 원하는 url로 바꾸십시오

page = requests.get(url)
soup = bs(page.text, 'html.parser')   # 여기까지는 붙여넣기 하셔도 됩니다

elem = soup.select_one('.weather_area .state')

wb = load_workbook("empty.xlsx")
wb.active.cell(column=3, row=2).value = elem.text
wb.save("empty.xlsx")

 

 

url 변수에 원하는 URL값을 넣고,  soup 변수 선언하는 곳까지는 CTRL+C, V 하셔도 됩니다.

 

 

<a data-clk="squ.weat" href="https://weather.naver.com/today/16730250" class="weather_area ico_w01">
    <div class="current_box">
        <strong class="current" aria-label="현재기온">27.2°</strong>
        <strong class="state">맑음</strong>
    </div>
    <div class="degree_box">
        <span class="min" aria-label="최저기온">16.0°</span>
        <span class="max" aria-label="최고기온">28.0°</span>
    </div>
    <span class="location">평양시</span>
</a>

네이버 웹페이지에서 저 오리 옆에 있는 '맑음'을 가져오려고 합니다. 그래서 개발자 도구를 들어가서 저 부분에 대한 소스코드를 따왔고, 위와 같습니다.

beautifulsoup 상에서 CSS-selector를 통해 원하는 엘리먼트를 가져오는, select 함수를 사용하겠습니다.

 

맨 위에 있는 a태그를 보니 weather_area라는 클래스가 있고, 원하는 strong 태그에는 state 클래스가 있습니다.

 

soup.select_one('.weather_area .state')

 

.class .class 를 사용할 시 왼쪽 .class는 부모 클래스, 오른쪽 .class는 자식 클래스로 선택합니다.

 

 

하여튼 이렇게 선택해서 엑셀에 집어넣기만 하면 끝입니다. 엑셀에 데이터를 넣는 방법은 링크를 참조하세요.

 

2022.09.14 - [분류 전체보기] - [openpyxl 기본] 002. 엑셀파일 불러오기

 

 

 

 

 

이상 데이터를 크롤링해서 엑셀에 집어넣는 연습을 했습니다. 감사합니다.

 

 

해당 블로그에서 무료 업무 자동화 툴을 제작해 드리고 있습니다.
단순 제 학습용 및 게시글로서 활용되며, 전해주신 데이터는 철저히 익명 처리해서 활용할 예정입니다.
많은 관심 부탁드립니다.

e-mail : lilarcor27@gmail.com