2020/01/31 - [Back-end/Python] - [크롤링] Selenium으로 특가 상품 수집 (1) - 프로젝트 준비
2020/01/31 - [Back-end/Python] - [크롤링] Selenium으로 특가 상품 수집 (2) - Selenium 설정
2020/01/31 - [Back-end/Python] - [크롤링] Selenium으로 특가 상품 수집 (3) - 데이터 분석 및 수집
2020/02/02 - [Back-end/Python] - [크롤링] Selenium으로 특가 상품 수집 (4) - 모듈화
지난 포스트에서 Selenium을 이용하여 11번가, 티몬, 위메프의 특가상품을 수집하는 크롤러를 만들었다. 그러나, 데이터를 수집할 때 마다 PC에서 Crawler를 실행시켜야해서 불편하고 실용성이 떨어진다. 그래서, 텔레그램 봇을 이용하여 스마트폰에서도 데이터를 수집할 수 있도록 기능을 추가해보려고 한다.
텔레그램을 설정하는 방법에 대해서는 다른 포스트에서 다루었으니 참고하기 바란다.
- [Telegram] 무작정 시작하기 (1) - 설치 및 실행
1. 텔레그램 봇 만들기.
1-1. 소스 작성.
- bot.py
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
import crawl
from telegram import ChatAction
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater
from telegram.ext import CommandHandler, CallbackQueryHandler
BOT_TOKEN='672768316:AAHXpYmnMzGp_eH0i-juikUFU6q9y78CBhA'
updater = Updater( token=BOT_TOKEN, use_context=True )
dispatcher = updater.dispatcher
def cmd_crawl(update, context):
task_buttons = [[
InlineKeyboardButton( '11번가', callback_data='11st' )
, InlineKeyboardButton( '티몬', callback_data='tmon' )
, InlineKeyboardButton( '위메프', callback_data='wemap' )
], [
InlineKeyboardButton( '취소', callback_data='cancle' )
]]
reply_markup = InlineKeyboardMarkup( task_buttons )
context.bot.send_message(
chat_id=update.message.chat_id
, text='수집 대상을 선택해주세요.'
, reply_markup=reply_markup
)
def cb_crawl(update, context):
query = update.callback_query
target = query.data
if target == 'cancle':
context.bot.edit_message_text(
text='작업을 취소하였습니다.'
, chat_id=query.message.chat_id
, message_id=query.message.message_id
)
else:
context.bot.edit_message_text(
text='데이터를 수집중입니다...'
, chat_id=query.message.chat_id
, message_id=query.message.message_id
)
for item in crawl.run( target ):
print( item )
context.bot.send_message(
chat_id=update.effective_chat.id
, text="상품명: {title}\n가격: {price}원\n{link}".format(title=item["title"], price=item["price"], link=item["link"])
)
context.bot.edit_message_text(
text='수집 완료'
, chat_id=query.message.chat_id
, message_id=query.message.message_id
)
crawl_handler = CommandHandler('crawl', cmd_crawl)
crawl_cb_handler = CallbackQueryHandler( cb_crawl )
dispatcher.add_handler( crawl_handler )
dispatcher.add_handler( crawl_cb_handler )
updater.start_polling()
updater.idle()
|
cs |
- 1 ln: 이전 포스트에서 만든 Crawler를 Import.
- 2~5 ln: 텔레그렘 봇을 만들 때 필요한 모듈들 Import.
- 7~10 ln: 텔레그램 봇 설정.
- 12~27 ln: 채팅방에서 '/crawl' 명령어가 입력되면 실행할 이벤트.
* 버튼이 포함된 메시지를 봇에서 채팅방으로 전송.
- 29~57 ln: 사용자가 선택한 버튼 값에 따라 Crawler를 실행하는 콜백 함수.
- 59~63 ln: Bot에 Handler를 추가.
- 65~66 ln: Bot이 채팅방의 메시지를 감시.
1-2. 실행.
> python bot.py
1-3. 실행 결과.
2. 마치며.
- 기존에는 Crawler를 만들고나면 Flask로 웹 페이지를 만들어서 조작했었는데, 텔레그렘 봇을 알고나서부터는 거의 텔레그램 봇을 만들어서 사용하고 있다. 코딩할 것도 적고 디자인도 고민할 필요가 없어서 너무 편하다.
'Back-end > Python' 카테고리의 다른 글
[Pyftpdlib] FTP 서버 만들기 (2) - 사용자 인증 설정 (0) | 2020.02.12 |
---|---|
[Pyftpdlib] FTP 서버 만들기 (1) - 설치 및 실행 (0) | 2020.02.12 |
[크롤링] Selenium으로 특가 상품 수집 (4) - 모듈화 (0) | 2020.02.02 |
[크롤링] Selenium으로 특가 상품 수집 (3) - 데이터 분석 및 수집 (2) | 2020.01.31 |
[크롤링] Selenium으로 특가 상품 수집 (2) - Selenium 설정 (0) | 2020.01.31 |
댓글