brunch

매거진 3시 27분

You can make anything
by writing

C.S.Lewis

by 기획하는 족제비 Feb 27. 2023

ChatGPT로 크롤러를 만들어 보았다.

소개할게요 내 작은 AI비서


인트로

최근에 ChatGPT를 활용한 블로그 콘텐츠 생성 자동화 프로젝트를 회고했었다. 이때 회고에서 느낀 것처럼 ChatGPT는 결과를 만들어내기 위한 수단으로 활용하는 것으로 방향을 생각하고 있다.


우선 필요하다고 생각한 것은 얘를 활용할 수 있는 방법들. 특정 주제를 던져주고 이에 대해서 글을 받아내는 것은 한 달 동안 블로그를 통해 테스트해 봤으니 패스하고, 내가 이것을 가장 잘 활용할 수 있는 수단이 뭘까 생각해 봤을 때 떠오르는 것은 데이터를 확인하고 분석하기 위해 사용하는 것이었다. 그래서 내가 필요한 데이터가 있으면 빠르게 이를 확인할 수 있는 방법을 미리 알아두는 것, 이것을 우선 ChatGPT 연습 목적으로 설정했다.


비개발자인 나는 코드를 하나 짜는데 시간이 많이 걸려 코드를 웬만해서 작성하지 않는다. 나보다 잘하는 개발자들이 회사 앞자리에 있는데 뭣하러 직접 작성하나 싶기도 하고 말이다. 하지만 오늘은 ChatGPT가 내 전속 개발비서가 되어줄 터이니, 머리로는 이해하지만 작성은 힘들었던 것들을 연습 목록에 녹여봤다. 아래는 작성한 연습 목록의 카테고리들.


1. 크롤러 만들기   

프로덕트를 개선하거나 신규 프로덕트를 만들기 위한 역대 프로젝트들을 생각해 봤을 때, 필요한 정보들을 데이터팀에게 부탁할 때가 많았다. 이것을 ChatGPT를 통해 만들어보는 연습을 해보겠다는 것.

예를 들어, 브랜드 인지도와 관련된 지표를 만들기 위해 블로그 글들을 검색엔진에서 크롤링해야 하는 일이 있다고 했을 때 결과를 받아보는 데까지 시간이 꽤나 소요된다. 문서를 작성하고 담당자가 이해하고, 개발한 다음 산출물을 확인하는 과정을 거쳐야 하니까 말이다.

하지만 이를 ChatGPT가 대신해 준다면 모두의 시간을 세이브할 수 있을 것이다.


2. API 연결을 통해 원하는 응답값 받아오기   

빠르게 공공 데이터 API를 연결하거나, 다른 프로덕트를 분석할 때 API를 뜯어보기 위한 용도로 사용하기 위함이다.

보통 개발자도구에서 API의 response를 json형태로 확인한다면 이를 크롬익스텐션의 제이슨 뷰어를 통해 보면 되겠지만, 그렇지 않은 경우도 왕왕 있으니까 알아두면 언젠가 꺼내 쓸 수 있지 않을까 싶다.

이것을 통해 나중에 내가 MVP를 만들 일이 생긴다면, 이를 빠르게 만들 수 있도록 다양한 경험을 미리 해두기 위함도 있다.


3. 데이터 분석()   

내가 원하는 데이터를 분석할 때 사용을 하고자 한다.

아마 그리 복잡한 통계 지식이 필요하지 않은 분석들이 주 대상이 될 것 같지만, 그래도 이를 코드로 처리하는 것을 ChatGPT에게 부탁하려 한다.

이 티스토리를 재밌게 봤다. ☞ https://whatever-idc.tistory.com/47




크롤러를 만들어보았다.

최근 회사를 통해 메인 프로젝트와 함께 협력 관계의 MCN 업체 백오피스 기획을 병행하였다. 이때 이들의 업무 시트를 분석하던 도중 기억에 남는 것이, 이 업체의 담당자들이 전속 크리에이터의 유튜브 채널에 대한 정보를 수기로 업데이트하고 있다는 것. 수십 명이 되는 유튜버들의 유튜브 채널의 URL을 일일이 복사+붙여 넣기 하여 구독자수를 확인하고 구글 시트에 업데이트하고 있던 것이었다. 이거 하는데만 30분이 넘게 걸리는 것을 봤다.


유튜브의 경우에는 이미 Vling이라는 서비스에서 크롤러를 통한 정보를 제공하고 있다는 것을 알고 있어서 원하는 유튜브 채널에 대한 구독자수만 쭉 가져오는 크롤러를 만들 수 있겠다 싶었다. 그래서 이를 ChatGPT를 통해 만들어보았다.


1. 가져오고 싶은 정보들을 정의한다.

내가 가져오고 싶은 정보는 채널명, 구독자수 두 개다. 이 두 정보를 우선 HTML의 id값에서 찾았다. (HTML에서 확인할 수 있는 값이면 google sheet의 importxml 함수를 통해서도 가져올 수 있겠지만, 이번엔 파이썬을 쓸 생각이다.)

기획자의 영원한 친구, 개발자 도구(F12)


2. Prompt를 작성하고 ChatGPT한테 명령한다.

우선은 구독자수만 가져오도록 Prompt를 작성했다. 회사에서 SB를 작성할 때 개발자들에게 전달하는 Description을 조금 더 상세히 작성한 기분이었다. 아래는 Prompt에 담은 내용.


1. 파이썬을 사용해서 특정 유튜브 채널의 구독자수를 크롤링해 오는 코드를 만들어라.

2. 그리고 이것을 엑셀로 다운로드할 수 있게 해라.

3. 구독자수는 HTML 태그 중 id가 ‘subscriber-count’인 곳에서 확인해라. 

4. 이때 구독자수는 문자열로 구성되어 있을 텐데, 숫자를 따로 분리해라.

5. 예시 URL은 이것을 사용해라.

ChatGPT가 준 답변. 설명도 친절하다 와우.


3. 미세조정 1

나는 BeautifulSoup를 쓰기 싫다. 또 모듈을 찾아서 설치하기가 귀찮기 때문. 따라서 기존에 설치해 놓은 Selenium을 사용하도록 코드 변경을 요청했다. 아래 사진은 ChatGPT가 만들어준 코드다. 로직별로 친절하게 주석이 적혀있다. 주석 덕분에 코드에 대한 이해가 더욱 쉬워졌다.


ChatGPT가 짜준 로직은 아래와 같다.   

1. 사용자에게 유튜브 채널의 URL을 입력받는다. URL이 여러 개인 경우 이를 콤마(,) 단위로 분리한다. (내가 여러 URL 입력할 것이라고 함께 반영해 달라고 했음.)

2. Selenium 웹드라이버를 실행시킨다.

3. 구독자수를 셀 수 있는 빈 저장소를 만든다. (배열 형태로 저장)

4. 각 URL에 대한 아래 기능 루프를 돌린다.

5. URL을 웹드라이버에서 불러온다.

6. ‘id’ 속성에서 구독자수를 찾는다.

7. 구독자수가 문자열로 올 것이기 때문에, 여기서 숫자열을 따로 분리한다.

8. append() 함수를 통해 구독자수를 저장할 배열에 앞서 분리해낸 숫자를 추가한다.

9. pandas 함수를 통해 엑셀로 내보낸다. 끝!


3. 미세조정 2

코드를 실행시키면 하단 터미널에서 URL들을 입력할 수 있다. 하지만 나는 크리에이터 URL을 미리 작성해 뒀다가 실행시킨다든가, 내가 만들진 않을 거지만 조금 멀리 가서 배치 잡을 만든다든가 하는 것을 고려하여 URL을 그 때 그 때  input을 통해 입력받게 하지 말고 미리 이를 입력할 수 있게 변경했다.


이후 실행시킨 결과물, 잘 동작하는 것을 볼 수 있다. 다만 문제는 유튜브의 구독자수가 정확하게 나오지 않는다는 점. 중간에 찍힌 소수점은 생략되고, ‘만 명' 이거나 ‘천명'인 경우가 있는데 이것이 무시된다는 문제가 있었다. 따라서 미세조정을 한 번 더 진행했다.

두 번째 미세조정 후 결과물


4. 미세조정 3

유튜브의 숫자가 나오는 것은 두 가지 경우다. 100명까지는 그냥 숫자로 나오고, 천명이 넘어가면 ‘천’이라고 나오며 만 명이 넘어가면 ‘만’ 단위가 붙는다. 예) 498,000명 → 49.8만명, 2,900명 → 2.9천명


그래서 ChatGPT에게 이 두 경우를 함께 고려해 달라고 했다.

이때 사용한 Prompt


지만 예시를 잘못 말해줬다. ‘구독자수 49.8만명’ 이라고 말을 해줬어야 했는데 단순히 ‘49.8만명’이라고 말을 해버린 것. 이를 놓친 ChatGPT의 코드에서는 오류가 발생했다. ‘49.8만명’에서 ‘만명’을 떼버리면 남는 문자열 ‘49.8’을 실수로 변환할 수 있을 것이라고 생각한 ChatGPT가 float() 함수를 사용해 버렸다. 하지만 앞에 ‘구독자’라는 문자가 또 존재한다. 이 때문에 한 번 더 미세조정을 진행했다.

float() 함수를 사용하지 못해요.


5. 미세조정 4

크롤러 동작 후 subcriber_count 변수에 저장되는 것은  ‘구독자수 49.8만명' 과 같은 문자열이다. 그러면 고려해야 하는 것을 정리해 보자.


1. 숫자가 문자들 사이에 있는 것

2. 뒤의 문자가 ‘천’인지 ‘만’인지에 따라서 수를 곱해줘야 한다는 것


이 두 개를 ChatGPT에게 알려주어야 한다. 내가 본 에러메시지와 함께 설명을 다시 해주고 코드를 수정해 달라고 했다. 이론적으로는 정규표현식을 사용해서 숫자만 달랑 떼버리는 게 제일 편할 것 같은데, 이거는 ChatGPT가 알아서 해주겠지. 아래는 이때 사용한 Prompt.

ChatGPT가 사과도 해주고, 설명도 해준다. 정규표현식도 써줬네, 땡큐!



결과

결과는 성공적이다!

구독자수도 정상적으로 잘 환산해 준다. 영상에는 없지만, 이후 테스트에서 ‘구독자수 2.9천명’의 경우 2900으로 환산해 주는 것을 확인했다. 코드만 조금 손 본다면 이 정보들 외에도 유튜브 채널에서 확인할 수 있는 정보들을(예를 들어 동영상 개요 등) 수집할 수 있을 것이다.



그래서?

ChatGPT를 통해 코드를 받고 미세조정하고, 마지막 결과까지 도출해 내는 데까지 총 20분이 소요됐다. 이 작은 놀이를 하면서 느낀 것은 머릿속에 이론이 존재하고 이를 AI에게 설명만 해줄 수 있다면 원하는 것을 충분히 만들어낼 수 있겠다는 것. 노코드/로우코드의 기술이 점점 발전함에 따라 결국에는 적재적소에 알맞은 툴과 방법을 적용할 줄 아는 것이 엄청난 경쟁력이 될 수 있지 않을까 생각한다.


그렇기 때문에 다양한 경험 더욱 쌓아야 한다는 것을 느꼈다. ‘어떤 경우에는 뭘 하니까 되더라.’라는 경험을 머릿속에 충분히 쌓아놔야겠다는 것. 다양한 곳에서 일하는 사람들과 커뮤니케이션을 더 열심히 할 명분이 확실해졌다.


p.s. 오늘 만든 결과물은 협력 업체의 대표님에게 생색내는 용도로 쓰였다 ㅋㅋ


ⓒ 327roy

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari