프로그램언어+/┗Crawling

보안기사 뉴스 크롤링 후 챗봇에 데이터 퍼붓기(Slack)

logthink 2019. 1. 18. 13:01

#개요

프로그래밍 개발 강의를 진행할때 데이터를 수집하고 활용방안에 대해 설명을 했었다.

그 활용방안 중에는 실제로 내가 진행했던 프로젝트도 있었고, 구글검색을 통한 내용도 있었다.

그 중 긁어온 데이터를 챗봇에 뿌려주는 활용방안을 실제로 구현해보고 이번주 강의때 써봐야겠다.

그래서 이 포스팅을 시작한다.


#Why Python?

왜 파이썬이냐? 간단히 말하지.

다른언어와 잘 붙어서 사용한다(유연한 언어) C와 C++의 native laguage와도 연동이 되는점. 

즉 기존 라이브러리와 같이 협동이 가능하다.

그럼 뭐가 좋냐? 과거에 구현했던 애플리케이션이 어떤언어인지 제약받지 않고 유지보수가 가능하단 거지.


그리고 Python은 문자열 데이터 처리에 적합한 내장함수들을 지원해 >>dir("") 을 해보길바란다.

그렇기 때문에 인공지능, 빅데이터에서 선호하는 언어로 자리매김을 했지뭐야.

우리가 이번에 다루는 일부분은 빅데이터에서 데이터수집 및 전처리에 해당되는 내용과 흡사해.


마지막으로 문법이 쉬우니까 일단해바! 

공식문서 ShortCut


#크롤링(crawling)

우리는 인터넷에 존재 하는 많은 데이터 중 필요로 하는 데이터가 존재해. 

예를 들어 점심시간 식단표가 급식실 홈페이지에 기재되있거나, 

네이버에 "날씨"라고 검색했을 때 나오는 온도와 미세먼지 농도 등 

혹은 증권사의 경우 세계경제 issue나 코스닥,나스닥 지수에 민감하고 자주 확인하게 되겠지. 

이러한 데이터는 URL이라는 식별자로 인터넷에 존재해.

그리고 우리는 인터넷 네트워크에 접속해 URL을 통해 해당 서비스를 제공하는 서버에게 

데이터를 요청하고 응답을 받지 

그 데이터는 html이란 문서고, 우린 html 문서안에 필요한 정보(온도, 날씨, 미세먼지 농도, 주가, 주식거래, 양 등)을 볼 수 있지.


근데, 우린 이제 안거야.

뭘? 필요한 데이터가 무엇인지.

그래서 어쩌라고? 필요한 데이터만 가져오자 쓸데없이 html문서를 다 조회하지도 말고 인터넷에 검색해서 해당 서비스 html에 들어갈 필요없이 말이야.

OK 알겠어 어떻게? python은 수 많은 라이브러리가 존재해 OSI 7 Layer를 통한 네트워크 통신부터 http 통신등 

이미 편하게 사용할 수 있도록 설계해둔 모듈같이 그래서 우리가 이런 모듈을 객체로 사용해서 

필요한 변수와 함수를 사용하면 레고블록 조립하듯이 필요한 데이터를 수집하는 프로그램을 만들 수 있어.

  • 보안기사 뉴스 제목 데이터 수집(How)

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    # -*- coding: utf-8 -*-
    import requests
    from bs4 import BeautifulSoup
    #크롤링 URL 위치
    url_origin = "http://www.boannews.com/media/news_rss.xml"
    url_action = "http://www.boannews.com/media/news_rss.xml?kind=1"
     
    #function is http request handler 
    def get_obj_parserd(url):
        #definded http header
        request_headers = {
            'User-Agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                           '(KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36')
        }
        #http request
        res = requests.get(url, headers=request_headers)
        #print is http status
        print(res.status_code)
        #parsing by module of BeautifulSoup
        soup = BeautifulSoup(res.content, "html.parser")
        return soup
     
    #function is crawling of boannews
    def get_boannews(obj):
        #definded list variable
        res_list = list()
        #select attr is 'title'
        for x in obj.findAll('title'):
            #saving data at list
            res_list.append("○ {}".format(x.text))
        return res_list
     
    if __name__=="__main__":
        #request to URLs 
        boannews_url_lists = [url_action, url_origin]
        for url_item in boannews_url_lists:
            #Requesting each of URL data
            origin_obj=get_obj_parserd(url_item)
            print(get_boannews(origin_obj))



#슬랙(Slack)

슬랙은 개발자용 아카이브 메신저야. 뭐라고? 메신저라고  M.e.s.s.e.n.g.e.r 인마.

아~카톡으로 하자고?ㅋㅋ아 이거는 아카이브가 편리해 ㅋㅋ아카이브란?

특징으로는 Code Snippet이 가능하고, 구글서비스 연동이돼(Google Drive, Trello, Github, Slack등)

즉 메신저의 확장성이 좋지.

그래서 개발프로젝트를 하는 스타트업은 이 슬랙이라는 메신저 하나로 사내 ERP 시스템을 대체해서 사용하기도 하고,

출퇴근, 휴가 기록, 프로젝트 진행보고 등 아우르고 있어.

또한, 이 슬랙메신저는 채널을 관리해서 필요한 주제의 데이터를 나눠 사용하기도해

누구끼리? 해당 슬랙에 가입한 계정마다!!!

계정마다 관리가 가능하고, 슬랙의 Workspace로 슬랙서비스를 이용하는 공간도 분류해서 사용해.

처음에 접했을때는 단순 메신저보다 다소 복잡해보이지만, 인체공학적 처럼 사용하는데 공학적으로 설계되어있어서

금방 적응 가능:)


설치 및 사용방법 바로가기


#슬랙 챗봇

슬랙챗봇이라는 것은 슬랙에 사용되는 봇이야.

봇은 robot의 그 봇 맞아. 

챗봇은 이런 메신저기능이 있는 Kakao Talk, Line, Telegram등 상대와 대화할 때 사람이 아닌, S/W 프로그램이야.

즉 채팅기능을 하는 프로그램임.

왜 로봇인데? 이런 메신저 앱 이용자수가 증가하고 사용해 오면서 문제가 생기지.

반복적인 패턴을 가진 대화들(서비스상) 이런것들이 24시간 해야 된다고 생각해봐.

그래서 필요해졌어.

특히 활용분야로는  

(1) 대화형 커머스 서비스(숙소예약, 음식점 예약, 홍보 등) 

(2) 개인 비서 서비스(헬스케어, 금융상담, 날씨 정보 등)

(3) 공공 서비스(법률상담, 세금납부, 부동산정보, 구인구직 등) 

(4) 엔터테이먼트(광고, 미디어, 방송안내, 공연 등)

(5) 기업용 메신저(정보검색, 파일공유, 보관, 사무 자동화 등)


챗봇 종류 

(1) Menu-Driven

특히 커머스 서비스에서 예약을 할때, 정해진 메뉴를 제공하고 사용자로 하여금 메뉴에 한정된 서비스를 제공하는것.

(2) AI-based NLP

자연어 처리를 가능한 AI챗봇이라고 보면돼.

요즘에는 AI로봇과 상담하는 앱이 하나둘 등장하는데, 사람의 대화를 듣고 사람의 언어(자연어)를 추측하여

반응하는 챗봇이야.

그럼 우리는 이제 슬랙에서도 사용되는 챗봇을 이용해서 우리가 수집한 데이터를 챗봇이 알려주게 끔하게 하자.


#슬랙 챗봇 구현

  • Slack채널에 데이터 뿌리기 (How)

    #1 Apps 목록에서 사용할 애플리케이션을 create하자.(나만의 슬랙앱)
    여기서 내 슬랙의 WorkSpace를 정할 수 있음.

    #2 봇 생성

    이 봇은 내 Oauth기능의 client로 접근하는 Bot이다.

    해당 봇의 이름을 정하고 생성하자.

    (이때 항상 봇이 로그인 상태가 되도록 Always Show My Bot as Online 설정하자)


    #3 access Token 발급

    Install App to Workspace를 통해 Token 생성

    이것을 통해 나의 Bot은 Bot User OAuth Access Token을 얻는다.


    #4 슬랙봇의 권한 설정

    Select Permission Scope를 정하자.

    여기서 봇이 실제 사용자처럼 말하도록 하기 위해  chat:wrtie:user로 설정하자.


    #5 프로그래밍 코딩

    1
    2
    3
    4
    5
    6
    7
    #슬랙봇 모듈
    from slacker import Slacker
     
    token = "[access token]"
    slack = Slacker(token)
     
    slack.chat.post_message("[channel name]""[message]")



크롤링한 정보와 슬랙 챗봇에 메시지 보내기(Connection)

1
2
3
4
5
6
7
8
def get_answer():
    return "hihihihihi"
def get_news():
    news=""
    boannews_url_lists = [url_action, url_origin]
    for url_item in boannews_url_lists:
        slack.chat.post_message("#temp"str(get_obj_parserd(url_item).text));
    pass



Completed(capture)




참고


 https://api.slack.com/apps

 http://www.boannews.com/media/news_rss.xml

 http://www.oracloud.kr/post/chatbot_terms/

○ https://www.youtube.com/watch?v=b2Tf1xuXods&list=PLRx0vPvlEmdAtVOoFv9AWC34xK6Iez_3-&index=6

'프로그램언어+ > ┗Crawling' 카테고리의 다른 글

import.io를 이용한 웹 크롤러  (0) 2019.01.21
웹크롤러 프로그램 개발 강의자료  (0) 2019.01.18
멜론 차트 크롤링  (0) 2018.12.31
중고물품 크롤링  (0) 2018.12.31