딜바다 새 글 알림 텔레그램 채널
개발 , 팁과-정보 | 2019-12-30 05:00
https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c26a8019-ecf5-4440-81da-82389b7c8c7d/_.png
개인적인 필요로 텔레그램 봇(채널)을 몇 개 운영하고 있습니다. 그중에 하나가 딜바다 새 글 알림 채널입니다. 기존에 사용하던 채널, 알림봇이 있었는데, 운영 중지돼서 만들었습니다. 혼자 쓰려고 했다가 만든 김에 공개했는데, 벌써 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?
로그인한 상태로 크롤링하기

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/cac11130-6e3a-4577-8027-20ccdcbf98af/__.png
딜바다에는 특정 레벨 이상이 돼야 확인할 수 있는 게시물이 있습니다. 로그인을 안 했거나, 레벨이 낮으면, 글이 올라왔다는 건 보이지만 제목과 내용을 일정 시간 동안 확인할 수 없습니다. 제 채널에서는 레벨 제한 글을 한동안 위 스크린샷 같이 알렸습니다.
편하게 보려고 만든 건데, 저렇게 뜨니까 결국 일일이 눌러봐야 하고 불편하더라고요. 딜바다는 소셜 로그인을 사용해서 자동 로그인을 만들 수도 없으니 포기했는데, 어느 날 더 쉬운 방법이 떠올랐습니다. 이미 로그인된 세션 아이디를 사용하자! 왜 이 방법을 먼저 생각 안 했는지 모르겠네요. 쉬운 길을 두고 어려운 길을 고민하다니.
아무튼 딜바다는 세션 아이디를 쿠키에 PHPSESSID란 이름으로 저장합니다. 로그인을 하면 생성되는데, PC에서 로그인해서 확인했습니다. 해당 쿠키를 사용해서 크롤링하도록 했습니다.
cookies = {'PHPSESSID': 'xxxxxxxxxxxxxxxxxxxxxxxxxx'}
req = requests.get(url, cookies=cookies)
쿠키값 외에 브라우저 정보 같은 건 따로 확인 안 하더라고요. 손쉽게 해결했습니다. 이 방법으로 레벨 제한 글이 올라와도 글 제목이 정상적으로 출력됩니다. 물론 내용 읽으려면 본인 아이디가 특정 레벨 이상이 돼야 하는 건 어쩔 수 없지만요. 일일이 열어봐야 하는 불편함은 사라졌으니 만족합니다.
너(Python telegram 라이브러리)의 이름은
정말 별거 아닌데, 라이브러리 이름이 헷갈립니다. 코드에서 불러올 때는 import telegram 인데, 실제 라이브러리 이름은 python-telegram-bot 입니다. 새로 설치할 때 코드만 보고 pip3 install telegram 했다가 지우고 다시 설치하곤 했습니다… pip3 install python-telegram-bot 하세요!
끝으로 채널 홍보
사실 텔레그램에 핫딜 알림 채널이 많이 있습니다. 여러 사이트 글을 모두 알리는 채널은 너무 자주 울려서 불편하더라고요. 그런 분 중에 딜바다 새 글을 받아보고 싶으신 분들은 제 채널을 이용해주세요.
국내핫딜 등: https://t.me/dealbada_new
해외핫딜: https://t.me/dealbada_oversea
보시려면 당연히 텔레그램을 설치하셔야 합니다. 카카오톡에도 채널이랑 관련 API가 추가됐으면 좋겠네요.
태그 : python , 봇 , 텔레그램