Rather - Bot Beautiful Soup 파싱

LONGNEW·2021년 6월 20일
0

Rather-Bot

목록 보기
1/5

https://github.com/LONGNEW/Rather_Bot
친구들이랑 쓰는 디스코드 서버에 사용할 봇을 만들기로 했다.
매번 학교 공지사항 확인하는 것이 귀찮아서 크롤링을 통해

  1. 오늘 몇 건의 게시글이 올라왔는지.
  2. 해당 게시글의 링크는 무엇인지.
    에 중점을 두고 제작하였다.

셀레니움을 써서 하면 속도가 더 나올거 같지만 혹시나 봇을 다른 컴퓨터에서 돌리는 일이 발생할 수도 있어 bs4로 제작하기로 생각했다.

디스코드 봇 생성.

: 가장 막힌 부분이었다.

디스코드 계정 이메일 인증이 되어 있지 않으면 생성을 할 수 없다.(내껀 되어 있는 계정이였는데..)
https://discord.com/developers/applications
위 웹 사이트에서 New Application 버튼을 눌러 새로운 앱을 만들고 앱의 이름이 봇의 이름은 아니기 때문에 상관없다.

그 후 왼쪽 상단(가로줄 3개) 버튼을 누른후 Bot 카테고리에서 Add Bot을 클릭한다.
그 때 봇의 이름을 설정 하고 봇이 수행해야 하는 행동에 따라 밑에 있는 Permission을 주면 된다.

나중에 봇을 서버에 추가하려면 OAuth2 카테고리에서 URL을 생성한 후에 이를 검색창에 붙여넣으면 자기의 서버로 연결을 할 수 있다.

봇의 인식

디스코드에서 명령어를 작성 할 때 접두사가 꼭 필요하다 생각하고 있었는데 설정하기 나름이다.
본인의 봇에서는 그냥 접두사가 없으며 코딩 해둔 내용과 동일 한 채팅이 존재하면 봇이 행동을 수행한다.

1, 2, 3, 4 와 같이 숫자를 명령어로 만들었다.

출력

봇이 명령어를 인식을 했다면 인제 내용을 가져와야 한다.
다른 클래스에 메소드를 작성한 후에 리턴 값을 출력하게 하였으며 출력시에 await을 사용하여야 한다.

이 커맨드가 얼마나 있느냐에 따라 속도의 차이가 아주 크므로 유의 해야 한다.
await 내부에 \n 문자도 알아서 인식해서 출력 하므로 개행 문자를 사용하던지 아니면 """ """을 사용하여 간편하게 작성하는 것을 추천한다.

파싱

3가지의 메소드로 나누었다.
1. 숫자를 매개변수로 받아서 각 메소드를 수행한 후 리턴되어 온 값을 리턴 함.
2. 컴퓨터 공학과 홈페이지의 내용을 가져오기
3. 백마 광장 새소식 가져오기(이때까지는 이게 공지사항인줄 알았음)

컴퓨터 공학과 공지 사항 내용의 경우 td 태그를 이용하여 파싱하였다.
가장 큰 틀은 tr 이여서 이를 파싱하여 리스트 처럼 사용하였다.

tr의 값들을 files에 넣어서 for 문을 수행하였는데 내가 원하는 값들은 공지 사항을 제외한 게시글들이기에 공지사항만 가지고 있는 b-top-box를 이용해 이를 가진 값들을 제외 시켰다.

그 외에는
0 게시글 숫자
1 게시글 제목
2 첨부파일 유무
3 작성자
4 게시일
5 조회수
6 링크

를 순서대로 담고 있게 하였고 각 수행이 끝날 때마다 return할 리스트에 append하도록 하여 각 메소드가 끝날 때 리턴 하도록 하였다.

0개의 댓글