웹 크롤링 기반 연예인 부부 이름 맞추기 게임을 만들어 보고 있다.
구글에 '연예인 부부 명단'이라고 검색을 했고
부부 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으로 나오는 것이 게임의 특징이며,
또한, 한번은 남편이름이 공개되고 또 다른 한번은 아내 이름이 공개되게
작성했기에 게임을 반복해도 예측이 안되게 구현하였다.
즉, 연정훈 - _ _ 일 땐 아내 이름을 맞춰야 하고
한가인 - _ _ 일 땐 남편 이름을 맞춰야 한다.)