파이썬으로 클리앙 알뜰구매 크롤링 하(려해보)기

코드 열어보기 (잘못된 코드라 닫아둠)


# -*- coding: UTf-8 -*-

import requests
from bs4 import BeautifulSoup
from slacker import Slacker
import telegram
import os
import schedule
import time
import datetime

DEV_MODE = False

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
targetURL = 'https://www.clien.net/service/group/community' if DEV_MODE else 'https://www.clien.net/service/board/jirum'

slackToken = '--SLACK TOKEN--'
slack = Slacker(slackToken)
slackChannel = '#test'

bot = telegram.Bot(token='--TELEGRAM TOKEN--')
chat_id = bot.getUpdates()[-1].message.chat.id

def msgSlack(msg):
    slack.chat.post_message(slackChannel, msg)
    print('Success - send to Slack')

def msgTelegram(msg):
    bot.sendMessage(chat_id=chat_id, text=msg)
    print('Success - send to Telegram')

def sendMsg(msg):
    msgSlack(msg)
    msgTelegram(msg)

def main():
    req = requests.get(targetURL)
    req.encoding = 'utf-8'

    html = req.text
    soup = BeautifulSoup(html, 'html.parser')
    posts = soup.select('.symph_row .timestamp' if DEV_MODE else '.contents_jirum .timestamp')
    postMeta = soup.select('.symph_row .list_subject' if DEV_MODE else '.contents_jirum .list_subject')
    latest = posts[0].text

    with open(os.path.join(BASE_DIR, 'latest.txt'), 'r') as f_read:
        before = f_read.readline()
        f_read.close()
        if before != latest:
            i = 0
            while before != posts[i].text:
                beforeTime = datetime.datetime.strptime(before, "%Y-%m-%d %H:%M:%S") if before != '' else False
                postTime = datetime.datetime.strptime(posts[i].text, "%Y-%m-%d %H:%M:%S")
                if beforeTime != False and beforeTime > postTime:
                    print('마지막 글이 삭제된 것으로 추정')
                    break
                subject = postMeta[i].select('.subject_fixed')[0].text if DEV_MODE else postMeta[i].select('a')[0].text
                link = postMeta[i].get('href') if DEV_MODE else postMeta[i].select('a')[0].get('href')
                sendMsg(subject +' https://clien.net'+ link)
                i = i + 1
                if i > 10:
                    print('새 글이 10건 이상 발생')
                    sendMsg('등 10건 이상으로 마지막 기록된 글이 삭제됐을 가능성이 높습니다. 직접 방문을 권합니다. ' + targetURL)
                    break
            with open(os.path.join(BASE_DIR, 'latest.txt'), 'w+') as f_write:
                f_write.write(latest)
                f_write.close()
        else:
            print('No update but I\'m working...')

main()
schedule.every().seconds.do(main)
while 1:
    schedule.run_pending()
    time.sleep(60 if DEV_MODE else 600)


이렇게 사용하는 것이 정상이라고 보기는 어렵다고 판단되어 익숙한 node.js 형태로 바꿨다. request 디펜던시 하나로 세상 편안!! 제대로된 코드라 볼 수 없지만 파이썬은 잘 안쓰니까 혹시 나중에 필요할까 싶어 기록 차원으로 남겨둠..

참고했던 URL

참고하려던 URL


추가

지금은 node.js로 만들어놓은 것도 더이상 사용하지 않고 남이 잘 만들어놓은 텔레그램봇 그냥 쓰고 있다.