[사전스터디] Crawling -2 (연예인 부부 이름 맞추기 게임)

hyuckhoon.ko·2020년 4월 28일
0

What I learned in wecode

목록 보기
9/109

웹 크롤링 기반 연예인 부부 이름 맞추기 게임을 만들어 보고 있다.

구글에 '연예인 부부 명단'이라고 검색을 했고
부부 40쌍에 대한 리스트가 있는 홈페이지를 발견했다.
https://www.wikitree.co.kr/articles/221221

유튜브의 웹 크롤링 예시를 따라할 때와는 다른 문제점을 조우하게 됐다.

예를 들어,

① 21. 윤태영 - 임유진 부부의 경우 태크는 'strong'

② 22. 박준형 - 김지혜 부부의 경우 태그는 'p'

③ 23. 하하 - 별 부부의 경우는 태그가 'strong'이면서 23.이라는 숫자가
이름과 분리되어 있다.

즉,

위와 같이, 22. 박준형 - 김지혜 대비
하하 - 별
과 같이 html코드가 작성되어 있다.

우선, 웹에서 데이터를 가져오는 함수를 만들었다.
- 함수명 : get_names_from_web()

실행결과, 아래와 같이 데이터를 1차 크롤링 했다.

'strong' 태그라던지, 'p'태그를 없애기 위해
(순수히 연예인 이름만 가져오기 위해)
danify_list()라는 함수를 만들었다.

1) 1차 크롤링 된 연예인 부부를 리스트에 넣어두고,
2) 내가 지우고 싶은 문자들이 담긴 리스트를 만들어 줬다.
3) 이중 for문을 통해 지우고 싶은 문자들을 하나하나 지워 나갔다.
4) 그리고 게임이기에, 연예인 부부 리스트 중 랜덤으로 choice 한 후,
부부 한쌍을 리턴해줄 수 있게 만들었다.

그 결과,

다시 한번 실행해보면

과 같이 40쌍 중 무작위로 한쌍의 부부 이름이 나옴을 알 수 있다.

이제는 play() 함수와 display()함수를 만들어야 했다.

연예인 부부 한 쌍이 담긴 리스트를 받는 play()함수를 만들었다.

tries가 0보다 크고 game_staus 가 True 가 아니라면
게임이 계속 반복되도록 작성하였다.
(정답을 맞출시, game_status = True로 바꾸게 하여
반복문에 진입하지 않도록 한 것이다.)

또한, display_game()함수를 통해 tries(게임 기회, 목숨), 맞춘 단어 등을 유저가 볼 수 있도록 구현하였다.

마지막으로, main()함수를 만들었다.

이제 게임을 run 해보겠다.

1) 부부 이름 맞추지 못한 경우

2) 부부 이름 맞춘 경우

3) 한글자만 맞춘 상태

40쌍 부부 중 한 쌍의 부부가 random으로 나오는 것이 게임의 특징이며,
또한, 한번은 남편이름이 공개되고 또 다른 한번은 아내 이름이 공개되게
작성했기에 게임을 반복해도 예측이 안되게 구현하였다.

즉, 연정훈 - _ _ 일 땐 아내 이름을 맞춰야 하고
한가인 -
_ _ 일 땐 남편 이름을 맞춰야 한다.)

0개의 댓글