[6기 사프방] ChatGPT 클롤링 활용하기, (GPT-3 에서도 가능한 방법)


WebPilot을 활용하면 ChatGPT를 통해서 쉽게 웹사이트의 정보들을 가져와서 활용 할 수 있습니다. 이 플로우에 아이디어를 얻어서, GPT3에서도 크롤링을 효과적으로 할 수 있는 방법을 공유드립니다.


일반적으로 크롤링을 하는 방식은 querySelector(웹 문서 구조를 활용한 접근)를 통해 원하는 정보에 접근하는 것 입니다. 이런 방식은 웹 개발자가 아니면 정확한 Selector 잡는법을 알기 어렵고, 페이지의 구조가 바뀌면 그에 맞추어 대응을 해줘야합니다.


이번에, 사용해본 방식은 모든 케이스에 적용하긴 어렵겠지만, 기존과 다르게 더 활용가능한 부분이 있어 소개드립니다. 특히 서버 + GPT3를 활용해서 충분히 좋은 성능이 나오는 것을 확인하였습니다.
(물론.. 기존 클롤링과 다르게 비용이 들어갑니다.. )


예시로는, 에어비엔비 상세페이지를 사용해 보았습니다.


이 방식에서 핵심은, 내가 사용하고 싶은 정보의 구조를 GPT에게 알려주는 것 입니다. 그리고, 그 정보를 활용해 데이터를 쌓을수도 있습니다.


먼저, 분석할 웹사이트를 보면서, 내가 얻고 싶은 정보들을 상식적인 naming으로 선언해줍니다. 개발을 하시는 분이면, 본인이 사용하는 언어의 Type으로 선언을 하셔도 되고, 개발을 모르시는 분이면 적당히 생각나는 데이터의 형태를 적어주시면 됩니다. (ex. 숫자 - number, 문자 - string, 리스트 - list 등)

{
  hostName: string
  maxPeopleCount: number
  bedRoomCount: number
  bathRoomCount: number
  bedCount: number
  approximateAddress: string
  pricePerDay: number
  isKitchenExist: boolean,
  sampleReview1: string
  sampleReview2: string
}

다음으로, 내가 분석할 웹페이지에서 개발자 도구를 열어줍니다.

(개발자 도구를 여는 방법은 여기서 보실 수 있어요. https://imweb.me/faq?mode=view&category=29&category2=47&idx=71746)



개발자 도구를 열고 Console Tab을 선택한 뒤, 창에 document.body.innerText 를 입력해줍니다. 이렇게 하면, 해당 페이지의 텍스트 정보만을 추출해서 컴팩트한 형태로 만들어줍니다. 이 텍스트를 복사해줍니다.


이제 준비는 다 되었습니다. ChatGPT에게 분석을 요청합니다.

(위에 준비한 준비물과 함께, “위 Type정보를 활용해서 다음 텍스트를 분석해서 JSON 형태로 만들어줘. “ 와 같은 메시지를 입력합니다.)

{ 
  ...이전에 입력한 타입 
}

위 Type정보를 활용해서 다음 텍스트를 분석해서 JSON 형태로 만들어줘. 

"'콘텐츠로 바로가기\\n숙소\\n전체 39장 중 1번째 사진 표시\\n1 / 39\\n홍길동\\n4.94 ·\\n후기 64개\\n·\\n󰀃\\n슈퍼호스트\\n·\\n광진구, 서울, 한국\\n흔치 않은 기회입니다.홍길동님의 에어비앤비 숙소는 보통 예약이 가득 차 있습니다.\\n집 전체\\n호스트: 홍길동님\\n최대 인원 2명 · 침실 1개 · 침대 1개 · 욕실 1개\\n셀프 체크인\\n열쇠 보관함을 이용해 체크인하세요.\\n홍길동님은 슈퍼호스트입니다\\n슈퍼호스트는 풍부한 경험과 높은 평점을 자랑하며 게스트가 숙소에서 편안히 머무를 수 있도록 최선을 다하는 호스트입니다.\\n1월 20일 전까지 무료로 취소하실 수 있습니다.\\n홍길동. noorim.\\n\\n- 건대입구역 도보 1분거리\\n\\n- 체크인 14시 / 체크아웃 11시 \\n  (비대면)\\n\\n숙소\\n느림, 홍길동.\\n\\n게스트 이용 가능 공간/시설\\n- 빔프로젝터 (넷플릭스/디즈니플러스/유튜브)\\n- 오디오, 전자렌지, 헤어드라이기, 고데기, 샴푸, 바디워시, 린스, 일회용 칫솔, 바디타올, 수건, 세탁기, 냉장고, 커피포트, 냄비, 후라이팬, 그릇세트(2), 각종 술잔\\n\\n기타 주의사항\\n- 주차불가\\n- 흡연불가\\n- 소음주의\\n- 숙소내 비품 혹은 침구류 손상시 배상책임 있음.\\n더 보기\\n숙소 편의시설\\n도시 스카이라인 전망\\n주방\\n무선 인터넷\\nTV + 넷플릭스\\n엘리베이터\\n이용 불가: 일산화탄소 경보기\\n일산화탄소 경보기\\n편의시설 47개 모두 보기\\n호스팅 지역\\n광진구, 서울, 한국\\n광진구에서 5박\\n2024년 1월 25일 - 2024년 1월 30일\\n일월화수목금토\\n2024년 1월\\n\\t\\n1\\n\\t\\n2\\n\\t\\n3\\n\\t\\n4\\n\\t\\n5\\n\\t\\n6\\n\\n\\n7\\n\\t\\n8\\n\\t\\n9\\n\\t\\n10\\n\\t\\n11\\n\\t\\n12\\n\\t\\n13\\n\\n\\n14\\n\\t\\n15\\n\\t\\n16\\n\\t\\n17\\n\\t\\n18\\n\\t\\n19\\n\\t\\n20\\n\\n\\n21\\n\\t\\n22\\n\\t\\n23\\n\\t\\n24\\n\\t\\n25\\n\\t\\n26\\n선택하신 기간의 일부입니다.\\n\\t\\n27\\n선택하신 기간의 일부입니다.\\n\\n\\n28\\n선택하신 기간의 일부입니다.\\n\\t\\n29\\n선택하신 기간의 일부입니다.\\n\\t\\n30\\n\\t\\n31\\n\\t\\t\\t\\n날짜 지우기\\n64개 후기에서 별 5개 만점에 4.94개\\n4.94 · 후기 64개\\n매우 깔끔하고 건대입구역 바로 앞이라 접근성도 너무 좋았습니다 ! 앞으로 근처에 일있으면 여기서 묵으러구요 ! 감사합니다\\n원영\\n2023년 9월\\n숙소 아주 깔끔하고 지하철역 바로 앞이라서 편했어요!!\\n유진\\n2023년 8월\\n너무너무 깨끗하고 좋았어요! 내려다보이는 시티뷰가 좋아서 비가 왔는데도 분위기 있고 좋았어요! 단점이라고 굳이 뽑자면 빔프로젝터를 2층에서 보려고 하니까 전등에 가려서 잘 안 보인 점이 살짝 아쉬웠어요 그것 빼고는 완벽한 숙소였습니다 좋은 추억 만들고 가요😋\\n하연\\n2023년 8월\\n후기 64개 모두 보기\\n호스트: 홍길동님\\n회원 가입일: 2021년 5월\\n후기 142개\\n본인 인증 완료\\n󰀃\\n슈퍼호스트\\n전공은 건축인데, 건축을 싫어해요. 1~2mm 싸우면서 계획하는거 디자인하는거 질렸어요. 제가 중요하게 생각하는, 제가 그리는 공간 만들거에요.\\n홍길동님은 슈퍼호스트입니다.\\n슈퍼호스트는 풍부한 경험과 높은 평점을 자랑하며 게스트가 숙소에서 편안히 머무를 수 있도록 최선을 다하는 호스트입니다.\\n응답률: 100%\\n응답 시간: 1시간 이내\\n호스트에게 연락하기\\n안전한 결제를 위해 에어비앤비 웹사이트나 앱 외부에서 송금하거나 대화를 나누지 마세요.\\n환불 정책\\n1월 20일 전까지 무료로 취소하실 수 있습니다.\\n숙소 이용규칙\\n체크인 시간: 오후 2:00~오후 10:00\\n체크아웃 시간: 오전 11:00 전까지\\n게스트 정원 2명\\n더 보기\\n안전 및 숙소\\n일산화탄소 경보기 없음\\n화재경보기\\n어린이와 유아에게 적합하지 않음\\n더 보기\\n에어비앤비\\n한국\\nSeoul Region\\n서울\\nGwangjin-gu 및 인근의 다른 옵션 살펴보기\\n인천\\n휴가지 숙소\\n수원시\\n휴가지 숙소\\n춘천시\\n휴가지 숙소\\n용인시\\n휴가지 숙소\\nAnsan-si\\n휴가지 숙소\\n속초시\\n휴가지 숙소\\nPyeongtaek-si\\n휴가지 숙소\\nIlsan\\n휴가지 숙소\\nYeongjongdo\\n휴가지 숙소\\n다른 유형의 에어비앤비 숙소\\n서울의 휴가지 숙소\\n서울의 장기 숙박 숙소\\n서울 하우스 숙소\\n한국 하우스 숙소\\n₩113,800 \\n/박\\n₩113,800/박\\n1월 25일~30일\\n예약하기\\n사이트 바닥글\\n에어비앤비 지원\\n도움말 센터\\n에어커버\\n차별 반대\\n장애인 지원\\n예약 취소 옵션\\n이웃 민원 신고\\n호스팅\\n당신의 공간을 에어비앤비하세요\\n호스트를 위한 에어커버\\n호스팅 자료\\n커뮤니티 포럼\\n책임감 있는 호스팅\\n에어비앤비\\n뉴스룸\\n새로운 기능\\n채용정보\\n투자자 정보\\nAirbnb 긴급 숙소\\n바닥글 섹션\\n언어 선택\\n한국어 (KR)\\n통화 선택\\n₩\\nKRW\\n© 2023 Airbnb, Inc.\\n개인정보 처리방침·이용약관·사이트맵·한국의 변경된 환불 정책·회사 세부정보\\n웹사이트 제공자: Airbnb Ireland UC, private unlimited company, 8 Hanover Quay Dublin 2, D02 DP23 Ireland | 이사: Dermot Clarke, Killian Pattwell, Andrea Finnegan | VAT 번호: IE9827384L | 사업자 등록 번호: IE 511825 | 연락처: [email protected], 웹사이트, 080-822-0230 | 호스팅 서비스 제공업체: 아마존 웹서비스 | 에어비앤비는 통신판매 중개자로 에어비앤비 플랫폼을 통하여 게스트와 호스트 사이에 이루어지는 통신판매의 당사자가 아닙니다. 에어비앤비 플랫폼을 통하여 예약된 숙소, 체험, 호스트 서비스에 관한 의무와 책임은 해당 서비스를 제공하는 호스트에게 있습니다.'"


결과 값으로 다음과 같이 적절한 정보들을 알아서 넣어준 것을 확인하실 수 있습니다.

{
  "hostName": "홍길동님",
  "maxPeopleCount": 2,
  "bedRoomCount": 1,
  "bathRoomCount": 1,
  "bedCount": 1,
  "approximateAddress": "건대입구역 도보 1분거리",
  "pricePerDay": 113800,
  "isKitchenExist: ture,
  "sampleReview1": "매우 깔끔하고 건대입구역 바로 앞이라 접근성도 너무 좋았습니다 ! 앞으로 근처에 일있으면 여기서 묵으러구요 ! 감사합니다",
  "sampleReview2": "숙소 아주 깔끔하고 지하철역 바로 앞이라서 편했어요!!"
}


여기서 더 심화적인 액션도 가능합니다. 예를들면, 추가적인 설명을 통해, 연산이나, 새로운 정보 생성도 가능합니다.

{
  ...이전에 입력한 타입,
  // 위에서 사용되지 않은 정보를 충분히 활용해서, 이 방을 홍보하는 문구를 200자 이내로 작성해줘.
  content: string
}
{
  ...이전 응답 값,
  "content": "흔치 않은 기회입니다. 홍길동님의 에어비앤비 숙소는 보통 예약이 가득 차 있습니다. 건대입구역 도보 1분거리에 위치한 이 숙소는 최대 2명이 머무를 수 있으며 1개 침실과 1개 침대, 1개 욕실이 제공됩니다. 또한, 빔프로젝터, 오디오, 전자렌지, 헤어드라이기, 고데기, 샴푸, 바디워시, 린스, 일회용 칫솔, 바디타올, 수건, 세탁기, 냉장고, 커피포트, 냄비, 후라이팬, 그릇세트, 각종 술잔과 같은 다양한 시설을 갖추고 있습니다. 주차는 불가능하며 흡연 및 소음은 금지되어 있습니다. 숙소 내 비품 혹은 침구류 손상시 배상책임이 있습니다. 에어비앤비 슈퍼호스트인 홍길동님은 게스트가 편안하게 머무를 수 있도록 최선을 다하고 있으며 1월 20일 전까지 무료로 취소 가능합니다. 또한, 숙소는 도시 스카이라인 전망과 주방을 갖추고 있습니다. 이 숙소의 가격은 113,800 KRW/박입니다.
}

여기서 한단계 더 나아가는 것도 가능합니다.

(개발을 하시거나, API를 통해 데이터를 쌓고싶은 분들께 도움이 될만한 내용)


이미 서비스에서 사용하는 Type이 있다면 해당 Type으로 적당히 Mapping 해주는 것도 가능합니다. 다음과 같이 Type 정보를 작성할때 내가 사용하는 Type 정보도 함께 추가해주고, 그 Type을 활용해서 Mapping해달라고 합니다.

Facility = 'KITCHEN' | 'INTERNET' | 'SKY_LINE' | 'TV' | 'ETC'

{
  ...이전에 입력한 타입,
  // 반드시 Facility Type을 활용하고 최소 1개 이상 무조건 작성해줘.
  facilities: Facility
}

이렇게 입력하면, 데이터를 알아서 내가 만든 Type에 맞춰서 Mapping해줍니다.

(이거 직접하려면 분석하려는 서비스의 가능한 Type정보를 전부다 알고있어야해서, 정말 힘듭니다..)

{  
  ...이전 응답 값,
  "facilities": ["KITCHEN", "INTERNET", "TV", "ETC"]
}

지금까지의 모든 분석은 GPT3.5 웹을 활용해서 진행하였습니다. 예시로는 단순한 페이지 및 단순한 데이터구조를 사용하였지만, 훨씬 복잡한 구조나 복잡한 Type 정보도 잘 이해하는 것을 확인하였습니다.


아마 비용문제 때문에, 대규모 클롤링하시는 등의 작업은 대체할수가 없을 것 입니다. 하지만, 미리 구조를 파악하는 공수 없이 다양한 페이지를 입력으로 받아서, Parsing하는 작업이 필요하신 경우에는 도움이 되실 것 같습니다.


만약 WebPilot을 활용하신다면 개발자 도구를 통해 텍스트를 복사하실 필요 없이 그냥 Type 정보와 명령만 하시면 됩니다.


도움이 되셨기를 바라며, 이만 마치겠습니다.

감사합니다.

6
2개의 답글

👉 이 게시글도 읽어보세요

모집 중인 AI 스터디