이번시간에는 본인이 살고있는 동네의 날씨를 크롤링 해와서 챗봇에 서비스 기능을 추가해 주겠습니다.

보통, GPS를 킨 상태에서 핸드폰으로 네이버에 날씨를 검색하면 본인 동네의 날씨가 나오게 되는데, 이를 이용하겠습니다.

이번에는 간단하게 현재 동네 온도 정보를 받아오는 실습이기 때문에 어려운게 없습니다.

 

저는 휴대폰으로 네이버에 "날씨"를 검색하면 "발산 1동"의 날씨가 받아와 지므로,  네이버 검색창에 "발산1동 날씨"라고 검색한 뒤 그 페이지를 크롤링 하겠습니다.

https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query=%EB%B0%9C%EC%82%B01%EB%8F%99+%EB%82%A0%EC%94%A8&oquery=%EB%B0%9C%EC%82%B01%EB%8F%99&tqi=hgpo3dprvxssseUUrFdssssst6Z-291650 

 

발산1동 날씨 : 네이버 통합검색

'발산1동 날씨'의 네이버 통합검색 결과입니다.

search.naver.com

 

계속 실습하다보니 대충 어떻게 데이터를 크롤링 해올지 감이 오지않나요? 

이번시간에는 구체적인 설명은 생략하겠습니다. 저는 아래 사진에서 박스친 부분의 데이터를 받아왔습니다.

 

날씨 정보를 크롤링 해오는 코드는 아래와 같습니다. 3가지 정보를 얻어왔습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def n_weather_crawling():
    url="https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=%EB%B0%9C%EC%82%B01%EB%8F%99%EB%82%A0%EC%94%A8"
    r=requests.get(url)
    soup=BeautifulSoup(r.text,'html.parser')
    weather_info=soup.select("div.today_area>div.main_info")
    if len(weather_info) >0:
        temperature=soup.select("span.todaytemp")
        cast_text=soup.select("p.cast_txt")
        indicator=soup.select("span.indicator")
        if len(temperature) >0 and len(cast_text)>0 and len(indicator)>0:
            temperature=temperature[0].text.strip()
            indicator=indicator[0].text.strip()
            txt=cast_text[0].text.strip()
            weather="{}도\r\n{}\r\n{}".format(temperature,indicator,txt)
        return weather
cs

 

챗봇 코드는 아래와 같습니다.

1
2
3
4
5
elif(user_text=="동네날씨"):
        #n: neighbor
        n_weather=n_weather_crawling()
        bot.send_message(chat_id=id,text=n_weather)
        bot.sendMessage(chat_id=id,text=info_message)      
cs

 

최종 결과는 아래와 같습니다.

위에서 살펴본 사이트에서 본인이 원하는 정보(미세먼지, 오존지수 등)를 입맛대로 추가할 수 있습니다.

 

 

 

 

 

 

+ Recent posts