티스토리 뷰
해당 챗봇은 지역명을 사용자로부터 입력받으면, 해당 지역의 '미세먼지 농도'를 알려준다!
이를 위해서 먼저 파이썬으로 네이버 미세먼지 정보를 크롤링해야한다!
카카오 오픈빌더 승인이 아직 나지 않았기 때문에 나머지 과정은 추후에 올리도록 하겠다!
from urllib.request import urlopen, Request
from bs4 import BeautifulSoup
import urllib
import bs4
먼저 이렇게 모듈들을 import해준다
location=input()
enc_location=urllib.parse.quote(location+'미세먼지')
url='https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query='+enc_location
그리고 사용자로부터 input 받는 지역명을 location 변수에 넣어준다. 그리고 네이버에 '서울시 미세먼지'를 검색했을 때 url의 뒤가 '지역명+미세먼지'이기 때문에, 해당 url을 복사해오고, 사용자로부터 받은 지역명+미세먼지를 삽입해준다
req=Request(url)
res=urlopen(req)
html=res.read()
이는 Request 모듈을 통해 우리가 아까 저장한 url을 http로 보내주고, res.read()로 해당 페이지를 읽어온다.
soup=bs4.BeautifulSoup(html,'html.parser')
table=soup.find('div', class_='state_info').find('em',class_='main_figure').text
이제 BeautifulSoup을 통해서 위에 저장된 html을 파싱해주고, 이를 soup에 저장해준 후, 이 soup에서
우리가 가지고 오고자 하는 정보를 find한다! 그럼 이 find에 들어갈 값은 어떻게 알까 ?
이렇게 검색하고 개발자도구를 열어준다음, 가져오고자 하는 텍스트를 선택해주면 해당 텍스트가 어느 클래스에 있는 지알 수 있다. 여기서는 <div class ="sate_info"> 아래의 <span class="main_figure">에 속하므로, 그에 따라서 코딩을 해주면 된다.
fine_dust=int(table)
if(fine_dust<=30):
answer='현재 '+location+' 미세먼지 농도는 '+table+'로 좋음! 입니다'
elif(fine_dust<=80):
answer='현재 '+location+' 미세먼지 농도는 '+table+'로 보통! 입니다'
elif(fine_dust<=150):
answer='현재 '+location+' 미세먼지 농도는 '+table+'로 나쁨! 입니다'
elif(fine_dust>150):
answer= '현재 '+location+' 미세먼지 농도는 '+table+'로 매우나쁨! 입니다'
print(answer)
그리고 마지막은, 추출해온 미세먼지 농도를 정수형으로 변환시키고, 그에 따라 알맞은 대답을 저장해주는 것이다
from urllib.request import urlopen, Request
from bs4 import BeautifulSoup
import urllib
import bs4
location=input()
enc_location=urllib.parse.quote(location+'미세먼지')
url='https://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&query='+enc_location
req=Request(url)
res=urlopen(req)
html=res.read()
soup=bs4.BeautifulSoup(html,'html.parser')
table=soup.find('div', class_='state_info').find('em',class_='main_figure').text
fine_dust=int(table)
if(fine_dust<=30):
answer='현재 '+location+' 미세먼지 농도는 '+table+'로 좋음! 입니다'
elif(fine_dust<=80):
answer='현재 '+location+' 미세먼지 농도는 '+table+'로 보통! 입니다'
elif(fine_dust<=150):
answer='현재 '+location+' 미세먼지 농도는 '+table+'로 나쁨! 입니다'
elif(fine_dust>150):
answer= '현재 '+location+' 미세먼지 농도는 '+table+'로 매우나쁨! 입니다'
print(answer)
이게바로 크롤링이 완성된 코드이다! 다음번에 오픈빌더 승인이 나면 구름IDE를 이용해서 챗봇 스킬을 등록해보자!!
https://beomi.github.io/gb-crawling/posts/2017-01-20-HowToMakeWebCrawler.html
https://2jinishappy.tistory.com/21