딜바다 새 글 알림 텔레그램 채널
개발, 팁과 정보 | 2019/12/30 14:00개인적인 필요로 텔레그램 봇(채널)을 몇 개 운영하고 있습니다. 그중에 하나가 딜바다 새 글 알림 채널입니다. 기존에 사용하던 채널, 알림봇이 있었는데, 운영 중지돼서 만들었습니다. 혼자 쓰려고 했다가 만든 김에 공개했는데, 벌써 6개월이나 운영 중이네요.
예전에 학과 공지사항 채널을 만들어 운영했는데(지금은 삭제), 그때 작성한 코드를 바탕으로 수정했습니다. 간단한 Python 프로그램이라 별건 없는데, 만들면서 배운 점들 간단히 정리해봅니다.
CSS Selector에서 attribute 조건식 사용하기
딜바다는 그누보드 기반의 사이트입니다. 그누보드는 게시물 링크에 wr_id
가 들어갑니다. 다시 말해, a 태그 중 href attribute에 wr_id
가 들어가는 것만 골라내면, 해당 페이지의 모든 게시물 링크를 얻을 수 있습니다.
articles = soup.select(
'td.td_subject > a[href*="wr_id"]'
)
이렇게 작성하면 href에 wr_id
가 들어간 a 태그만 골라낼 수 있습니다. 이 외에도 특정 단어 포함, 특정 텍스트로 시작, 끝나는 attribute 등 여러 방법으로 필터링 할 수 있습니다. 자세한 내용은 CSS Selector Reference 페이지(w3schools)를 참고 바랍니다.
추가 참고 페이지: What is the difference between pipe (|) and caret (^) attribute selectors?
로그인한 상태로 크롤링하기
딜바다에는 특정 레벨 이상이 돼야 확인할 수 있는 게시물이 있습니다. 로그인을 안 했거나, 레벨이 낮으면, 글이 올라왔다는 건 보이지만 제목과 내용을 일정 시간 동안 확인할 수 없습니다. 제 채널에서는 레벨 제한 글을 한동안 위 스크린샷 같이 알렸습니다.
편하게 보려고 만든 건데, 저렇게 뜨니까 결국 일일이 눌러봐야 하고 불편하더라고요. 딜바다는 소셜 로그인을 사용해서 자동 로그인을 만들 수도 없으니 포기했는데, 어느 날 더 쉬운 방법이 떠올랐습니다. 이미 로그인된 세션 아이디를 사용하자! 왜 이 방법을 먼저 생각 안 했는지 모르겠네요. 쉬운 길을 두고 어려운 길을 고민하다니.
아무튼 딜바다는 세션 아이디를 쿠키에 PHPSESSID란 이름으로 저장합니다. 로그인을 하면 생성되는데, PC에서 로그인해서 확인했습니다. 해당 쿠키를 사용해서 크롤링하도록 했습니다.
cookies = {'PHPSESSID': 'xxxxxxxxxxxxxxxxxxxxxxxxxx'}
req = requests.get(url, cookies=cookies)
쿠키값 외에 브라우저 정보 같은 건 따로 확인 안 하더라고요. 손쉽게 해결했습니다. 이 방법으로 레벨 제한 글이 올라와도 글 제목이 정상적으로 출력됩니다. 물론 내용 읽으려면 본인 아이디가 특정 레벨 이상이 돼야 하는 건 어쩔 수 없지만요. 일일이 열어봐야 하는 불편함은 사라졌으니 만족합니다.
너(Python telegram 라이브러리)의 이름은
정말 별거 아닌데, 라이브러리 이름이 헷갈립니다. 코드에서 불러올 때는 import telegram
인데, 실제 라이브러리 이름은 python-telegram-bot
입니다. 새로 설치할 때 코드만 보고
했다가 지우고 다시 설치하곤 했습니다… pip3 install telegrampip3 install python-telegram-bot
하세요!
끝으로 채널 홍보
사실 텔레그램에 핫딜 알림 채널이 많이 있습니다. 여러 사이트 글을 모두 알리는 채널은 너무 자주 울려서 불편하더라고요. 그런 분 중에 딜바다 새 글을 받아보고 싶으신 분들은 제 채널을 이용해주세요.
국내핫딜 등: https://t.me/dealbada_new
해외핫딜: https://t.me/dealbada_oversea
보시려면 당연히 텔레그램을 설치하셔야 합니다. 카카오톡에도 채널이랑 관련 API가 추가됐으면 좋겠네요.
태그 : python, telegram, 봇
답글 남기기