본문 바로가기

사이드 프로젝트

노래방 일본 노래 검색 서비스 | 제 5부 - 크롤링으로 노래방 노래 데이터 추출하기

 

안녕하세요, 1인 사업가와 개발자 여러분! 펭귄 뮤지엄입니다. 🐧

지난 시간, 서비스의 뼈대가 되는 ERD와 Prisma로 스키마를 튼튼하게 설계해 보았는데요.

자, 이제 튼튼하게 지은 집에 가구를 채워 넣을 시간입니다. 바로 서비스의 핵심, '데이터'를 쌓는 작업이죠.

 

하지만 솔직히 이 작업, 사이드 프로젝트 과정에서 가장 귀찮고 지루한 단계 중 하나 아닌가요?

화려한 프론트엔드나 흥미로운 백엔드 로직 개발에 대한 열정은 넘치지만, 막상 데이터를 하나하나 쌓기 시작하면 지쳐서 프로젝트를 중단하게 되는 경우가 허다합니다.

(저 역시 그런 경험으로 폐기된 프로젝트 폴더가 여럿 있답니다...😂)

 

그래서 오늘은 이 지루한 데이터 수집 작업을 AI와 함께 스마트하게 자동화하는 여정을 떠나보려 합니다.

손으로 한 땀 한 땀 데이터를 긁어오는 대신, 파이썬 웹 크롤러를 AI에게 만들어달라고 요청하는 거죠! 생각만 해도 신나지 않나요?

 


 

🎯 데이터 수집 전략: 왜 직접 크롤러를 만들어야 할까?

"요즘 AI 기반 크롤링 서비스도 많던데, 굳이 만들어야 하나요?"

 

좋은 질문입니다! 

물론 클릭 몇 번으로 데이터를 긁어주는 훌륭한 서비스들도 많습니다.

하지만 우리가 타겟으로 하는 '금영 노래방' 웹사이트는 다행히도 정적(Static) 페이지로 구성되어 있어 데이터 구조가 비교적 단순합니다.

 

이런 경우, 비용을 지불해가며 외부 서비스에 의존하기보다 직접 간단한 크롤러를 만드는 것이 비용과 유연성 측면에서 훨씬 효율적일 수 있습니다.

(TJ 노래방 웹사이트는 동적 웹사이트이기에, 서비스를 이용해볼까 합니다 😢)

 

우리의 목표는 명확합니다.

파이썬Beautiful Soup 라이브러리를 활용하여, 금영 노래방의 일본 노래 데이터를 모두 수집하는 것입니다!

 


 

⚙️ 크롤러 동작 설계하기

코드를 작성하기 전, 크롤러가 어떤 순서로 일해야 할지 계획을 세우는 것이 중요합니다.

금영 노래방 사이트의 URL 구조를 분석해보니, 다음과 같은 규칙을 발견할 수 있었습니다.

  • https://kysing.kr/karaoke-book/?city=jp&s_cd=3&s_page=1&s_value=あ
  • city=jp 와 s_cd=3 은 일본 노래, 제목별 검색으로 고정됩니다.
  • s_value 는 일본어 문자(あ, か, さ...) 순서대로 바뀝니다.
  • s_page 는 각 문자에 해당하는 노래 목록의 페이지 번호입니다.

이 규칙을 바탕으로, 크롤러의 작업 흐름을 아래와 같이 설계했습니다.

  1. 시작 URL 설정: 일본 노래(jp), 제목순(s_cd=3), 첫 문자('あ'), 첫 페이지(s_page=1)로 URL을 조합합니다.
  2. 페이지 다운로드: 완성된 URL의 웹 페이지 전체를 다운로드합니다.
  3. 페이지 순회(Pagination): 현재 문자('あ')에서 다음 페이지(s_page=2, 3, ...)로 이동하며 페이지를 계속 다운로드합니다.
  4. 종료 조건 확인: 만약 '데이터 없음' 페이지가 나타나면, 해당 문자의 모든 페이지를 수집한 것으로 간주합니다.
  5. 다음 문자로 이동: 페이지 번호(s_page)를 1로 초기화하고, 다음 문자('か')로 s_value를 변경한 뒤 2번 과정부터 반복합니다.
  6. 전체 종료: 준비된 모든 문자를 순회하면 크롤링을 마칩니다.

이제 이 설계도를 가지고, 실제 개발에 사용할 도구를 준비해 보겠습니다.

 


 

🛠️ 개발 도구 준비: 파이썬과 Beautiful Soup

이 설계도를 현실로 만들어 줄 최고의 도구는 단연 파이썬(Python)Beautiful Soup 라이브러리입니다.

잠깐, Beautiful Soup이 뭔가요?

Beautiful Soup(뷰티풀 수프)는 파이썬의 대표적인 웹 크롤링 라이브러리입니다. 복잡한 HTML 문서에서 우리가 원하는 정보(노래 제목, 가수, 번호 등)를 마치 수프에서 건더기를 건져내듯 쉽고 빠르게 추출할 수 있게 도와주죠. 문법이 조금 깨진 HTML도 찰떡같이 알아듣는 똑똑한 친구랍니다.

 

자, 설계도와 도구가 모두 준비되었습니다.

이제 대망의 제작 시간입니다.

직접 코딩해야 할까요? 아니요! 우리에겐 최고의 전문가, Gemini가 있으니까요.

 


 

🤖 AI에게 코드 작성을 맡기다: Gemini 활용법

이제 우리가 세운 계획과 도구를 AI에게 명확하게 전달하여, 실제 작동하는 파이썬 코드를 요청할 차례입니다.

 

1단계: 웹 페이지 다운로드 코드 요청하기

먼저, 설계한 로직대로 웹 페이지들을 자동으로 다운로드하는 코드가 필요합니다. 저는 크롤러가 언제 멈춰야 할지 알려주기 위해, '데이터가 없는' 페이지의 HTML 파일을 미리 다운로드해두었습니다. 그리고 이 파일과 함께 Gemini에게 다음과 같이 요청했습니다.

안녕하세요, Gemini. 파이썬으로 웹 크롤러를 만들고 싶습니다.
'https://kysing.kr/karaoke-book/?city=jp&s_cd=3&s_page=1&s_value=あ' 링크의 웹사이트를 다운로드하는 파이썬 코드를 만들어주세요.
코드 설계는 다음과 같습니다.

1. `https://kysing.kr/karaoke-book/?city=jp&s_cd=3` 부분은 고정된 값입니다.
2. 웹사이트는 페이징 방식으로 되어 있으므로, `s_page` 값을 1부터 1씩 증가시키며 웹사이트를 다운로드해야 합니다.
3. 첨부된 '데이터 없음' HTML 파일을 참고하여 다운로드한 페이지 내용이 이 파일과 유사해지면, 해당 문자의 마지막 페이지로 간주합니다.
4. 마지막 페이지에 도달하면, `s_page`를 다시 1로 초기화하고 `s_value` 값을 다음 문자로 변경해주세요.
5. `s_value`는 다음 리스트의 순서대로 변경되어야 합니다: [あ, ぁ, か, が, さ, ざ, た, だ, な, は, ば, ぱ, ま, や, ゃ, ら, わ, ん, い, ぃ, き, ぎ, し, じ, ち, ぢ, に, ひ, び,ぴ, み, り, う, ぅ, く, ぐ, す, ず, つ, づ, ぬ, ふ, ぶ, ぷ, む, ゆ, ゅ, る, っ, え, ぇ, け, げ, せ, ぜ, て, で, ね,へ, べ, ぺ, め, れ, お, ぉ, こ, ご, そ, ぞ, と, ど, の, ほ, ぼ, ぽ, も, よ, ょ, ろ, を, A, B, C, D, E, F, G, H,I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, 0]

이제 위 요구사항에 맞춰 코드를 작성해주세요.
 
 
이 프롬프트 한 번으로, 수백 개의 웹 페이지를 알아서 다운로드하는 똑똑한 파이썬 코드를 얻을 수 있었습니다!
 
추출한 웹사이트들이 모여 있는 폴더

 

2단계: 다운로드한 파일에서 데이터 추출하기

이제 다운로드한 HTML 파일들이 담긴 폴더를 만들었습니다.

다음은 이 파일들 속에서 실제 데이터(노래방 번호, 제목, 가수)를 추출하여 JSON 파일로 저장하는 코드입니다.

이 작업 역시 Gemini에게 요청합니다.

지정한 폴더 경로에 있는 모든 HTML 파일을 읽어와서, Beautiful Soup 라이브러리를 사용해 데이터를 추출하는 파이썬 코드를 만들어주세요.

- 각 파일에서 '노래방 번호', '노래 이름', '가수 이름'을 추출해야 합니다.
- 추출한 모든 데이터는 JSON 형식으로 변환해주세요.
- 최종 결과물은 프로젝트 루트 경로에 'result.json'이라는 이름으로 저장해주세요.
 

✨짜잔! 이렇게 두 번의 요청만으로, 금영 노래방의 모든 일본곡 데이터를 담은 result.json 파일이 완성되었습니다.
정말 간단하죠?

 

추출한 노래 데이터


 

✨ 마무리하며: AI와 함께라면 데이터 수집도 스마트하게!

어떠셨나요? 개발자라면 누구나 한 번쯤 겪어봤을 데이터 수집의 고통이 AI 덕분에 한결 가벼워졌습니다.
금영 노래방은 정적 페이지라 비교적 수월했지만, 다음 목표인 TJ 노래방은 동적(Dynamic) 페이지라 조금 더 까다로운데요.

하지만 걱정 마세요. AI와 함께라면 기존에 투입했을 리소스의 절반만으로도 충분히 해결할 수 있습니다!

다음 포스팅에서는 이 까다로운 동적 웹 페이지의 데이터를 추출하는 과정을 소개해 드리겠습니다.
오늘 내용이 여러분의 사이드 프로젝트에 실질적인 도움이 되었기를 바랍니다.

궁금한 점이나 공유하고 싶은 팁이 있다면 언제든지 댓글로 남겨주세요!

여러분의 성공적인 프로젝트 완성을 펭귄 뮤지엄이 항상 응원하겠습니다! 🐧🚀

다음 편도 기대해주세요!