[00:00]
안녕하세요, 오늘 영상에서는
[00:01]
DeepSeek Grok과 Crawl4AI를 사용해
[00:03]
무료로 웹사이트를 스크래핑하는 방법을 보여드리겠습니다
[00:06]
수많은 AI 개발자와 기업들과 대화를 나눠본 결과
[00:08]
웹 스크래핑이 기업들이 가장 필요로 하는
[00:11]
핵심 기술 중 하나라고 자신있게 말씀드릴 수 있습니다
[00:13]
이는 기업들이 적극적으로 채용하는
[00:15]
기술 중 하나이기 때문에
[00:17]
오늘 다룰 내용을
[00:18]
놓치지 않으시길 바랍니다
[00:20]
웹 스크래핑 마스터가 되는 것을 돕기 위해
[00:22]
우리는 함께 단계별로
[00:23]
AI 웹 스크래퍼를 만들어볼 것입니다
[00:26]
이런 방식으로 웹사이트를 스크래핑하여
[00:28]
잠재 고객 정보를 수집하고
[00:30]
파일로 저장해서 나중에
[00:32]
이러한 잠재적 기회들을
[00:33]
활용할 수 있도록 하겠습니다
[00:35]
여러분들을 위해
[00:37]
이 영상의 모든 소스 코드를
[00:38]
완전히 무료로 제공해 드리겠습니다
[00:40]
링크는 아래 설명란에 있습니다
[00:41]
이제 더 이상 설명은 그만하고
[00:43]
웹 스크래핑을 시작해보겠습니다. 아, 잠깐만요
[00:45]
AI 프로젝트에 도움이 필요하시거나
[00:47]
같은 생각을 가진 AI 개발자들을 만나고 싶으시다면
[00:49]
제가 만든 무료 AI 개발자 스쿨을
[00:50]
확인해보시는 것을 추천드립니다
[00:52]
현재 4,000명 이상의 멤버가 있고
[00:54]
매주 무료 코칭 콜을 진행하고 있습니다
[00:56]
여러분들의 참여를
[00:57]
환영합니다
[00:59]
자, 이제 다시
[01:00]
영상으로 돌아가겠습니다
[01:01]
AI 웹 스크래퍼를 만드는 데 필요한
[01:03]
세 가지 도구에 대해 빠르게 알아보겠습니다
[01:05]
다음 섹션에서 코딩을 시작하기 전에
[01:07]
먼저 기초를 다지는 시간을 가져보겠습니다
[01:09]
이 모든 것을 실제로
[01:10]
작동하는 것을 보게 될 텐데요
[01:12]
첫 번째 도구는 Crawl4AI입니다
[01:14]
이것은 웹사이트 스크래핑을 매우 쉽게 만들어주는
[01:17]
오픈소스 라이브러리입니다
[01:19]
정말 훌륭한 점은
[01:20]
단순히 웹사이트를 스크래핑하는 것뿐만 아니라
[01:22]
스크래핑한 콘텐츠에
[01:24]
태그를 달고 이를 LLM에 전달하여
[01:26]
다양한 작업을 수행할 수 있다는 것입니다
[01:28]
우리의 경우에는
[01:29]
웹사이트를 스크래핑하여
[01:30]
실제로 잠재 고객 정보를 추출하는 것을
[01:33]
보여드릴 예정입니다
[01:34]
이것을 실제로 보여드리게 되어 매우 기쁩니다
[01:36]
그들은 도구 사용법을 이해하기 쉽도록
[01:39]
많은 예제를 제공하지만
[01:40]
걱정하지 마세요
[01:41]
여러분이 알아야 할 중요한 부분들을
[01:43]
코드 섹션에서
[01:45]
곧 자세히 설명해드리겠습니다
[01:47]
두 번째 도구는 DeepSeek입니다
[01:49]
DeepSeek이 최근 인터넷을
[01:50]
휩쓸고 있는데요
[01:52]
특히 DeepSeek R1 추론 모델을
[01:54]
보여드리게 되어 매우 기쁩니다
[01:57]
주목할 만한 중요한 점들이 있는데
[01:58]
OpenAI의 GPT-4 모델만큼 뛰어난 성능을 보여주며
[02:02]
놀라울 정도로 빠르고 저렴합니다
[02:05]
실행 비용이 약 20배 정도
[02:06]
저렴한데, 이 도구를 실제로
[02:08]
보여드리게 되어 매우 기대됩니다
[02:10]
마지막으로 세 번째 도구는
[02:13]
Grok입니다. Grok은
[02:14]
AI 모델을 실행하기 위한 특수 AI 칩들을
[02:17]
많이 보유하고 있습니다
[02:20]
llama 3나 deep seek 같은 모델을 생각해보세요
[02:23]
이제 grock을 통해서
[02:25]
놀라운 무료 티어를 제공받을 수 있는데
[02:27]
deep seek을 실행할 수 있을 뿐만 아니라
[02:29]
이 거대한 모델을
[02:31]
무료로 매우 빠르게 실행할 수 있습니다
[02:33]
이 예시에서 보시다시피
[02:34]
제가 deep seek R1에 대해 5살 아이에게 설명하듯이
[02:37]
설명해달라고 했고, 왜 모든 사람들이
[02:39]
이것에 대해 열광하는지 물어봤죠
[02:40]
매우 흥미로운 점은
[02:42]
실제로 작동하는 것을 볼 수 있다는 건데
[02:43]
deep seek R1의 특별한 점은 이런 사고
[02:46]
과정이 마치 인간처럼
[02:47]
'그런데 이것도 해야겠네'
[02:49]
'이것도 포함시켜야지'라는 식으로
[02:51]
답변을 생각하면서
[02:53]
최종 답변을 제공한다는 점입니다
[02:55]
보시다시피 grock이 이를 실행하는데
[02:57]
엄청나게 빠른 속도로 처리합니다
[02:59]
초당 275 토큰의 속도로 처리되고
[03:02]
이 모든 정보를 생성하는데
[03:03]
2초도 걸리지 않았죠. 따라서 Grock이
[03:05]
deep seek을 완전 무료로
[03:07]
실행할 때 우리의 영웅이 될 것입니다
[03:09]
이제 이 설명을 마쳤으니
[03:11]
우리가 실제로 만들
[03:12]
코드 개요를 살펴보도록 하겠습니다
[03:14]
전체 프로젝트를
[03:16]
단계별로 함께 코딩해볼 텐데요
[03:17]
함께 시작해보도록 하겠습니다
[03:19]
자, 시작해보죠
[03:21]
이제 코드를 살펴볼 시간인데
[03:22]
코드를 시작하기 전에
[03:23]
예시 시나리오를 설명해드리고 싶습니다
[03:25]
이해하기 쉽도록 말이죠
[03:26]
이번 경우에는 우리가
[03:28]
웨딩 포토그래퍼를 고용했다고 가정해볼게요
[03:30]
그는 새로 이사를 왔고
[03:33]
더 많은 고객을 확보하여
[03:34]
사업을 성장시키고 싶어 합니다
[03:36]
비즈니스를 성장시키려면
[03:38]
어떻게 해야 할까요? 그는
[03:39]
더 많은 웨딩 베뉴에 연락하여
[03:41]
자신의 서비스를 제안하고 싶어 합니다
[03:44]
그래서 우리에게 필요한 것은
[03:46]
일반적인 웨딩 베뉴 웹사이트에서
[03:48]
웨딩 베뉴 정보를 수집하는 것입니다
[03:51]
우리의 경우에는
[03:53]
이렇게 말할 수 있죠
[03:54]
'네, 기꺼이 스크래퍼를 만들어드리겠습니다
[03:57]
당연히 비용을 받고 말이죠'
[03:59]
그리고 이제 우리가 할 일은
[04:00]
그들이 이사 온 지역으로 가서
[04:02]
일반적인 웨딩 베뉴 사이트를 찾아
[04:03]
웹 스크래퍼를 만드는 것입니다
[04:05]
이 스크래퍼는
[04:07]
해당 지역의 모든
[04:09]
웨딩 관련 정보를 수집할 것이고
[04:11]
계속해서 페이지를 넘기면서
[04:13]
모든 정보를 수집할 것입니다
[04:15]
이 정보들을 스크래핑하고
[04:16]
더 이상 새로운 웨딩 베뉴가 없을 때까지
[04:18]
계속 수집할 것입니다. 그리고
[04:20]
훌륭한 엑셀 시트를 만들어서
[04:22]
그들에게 전달할 수 있도록 하고
[04:23]
우리의 최종 목표는
[04:25]
이런 형태의 결과물을 만드는 것입니다
[04:26]
이를 통해 포토그래퍼는
[04:29]
베뉴의 이름과 위치
[04:30]
비용을 알 수 있고
[04:32]
AI를 활용하여
[04:34]
한 문장으로 된 설명도 생성할 것입니다
[04:35]
장소에 대한 설명을 생성하여
[04:37]
직원이 장소에 전화할 때 그들의 업무와
[04:39]
공간에 대해 정확히 알 수 있도록 하고
[04:42]
전화할 때 지적인
[04:43]
대화를 나눌 수 있도록 할 것입니다.
[04:44]
이것이 바로 우리가 구현하고자 하는
[04:46]
코드입니다. 우리는 데이터를 스크랩하고
[04:47]
CSV로 저장한 다음
[04:49]
최종적으로 구글 시트에 업로드하여
[04:50]
고객에게 전달하고 대금을 받을 것입니다.
[04:52]
이것이 바로 우리가 하려는 것이니
[04:53]
지금부터 시작해 보겠습니다.
[04:55]
이제 코드로 넘어가 보겠습니다.
[04:56]
자, 이제 우리가
[04:58]
실제로 손을 더럽히고
[04:59]
AI 웹 스크래퍼 코딩을 시작할 시간입니다.
[05:01]
DeepSeek, Grock, Crawl4AI라는 세 가지 핵심 도구를
[05:03]
사용할 것입니다. 이것들이
[05:07]
이 프로젝트에서 사용할 핵심 도구들입니다.
[05:08]
이 프로젝트를 최대한
[05:10]
간단하게 설정하여 여러분들이
[05:12]
복사하여 붙여넣기만 하면
[05:13]
바로 실행되도록 했습니다.
[05:15]
또한 설정을 쉽게
[05:16]
몇 가지만 수정하면
[05:18]
다른 웹사이트도 즉시
[05:20]
스크랩할 수 있도록 구성했습니다.
[05:22]
이것이 얼마나 쉽게 실행되는지
[05:23]
여러분들이 보시게 될 것이 기대됩니다.
[05:26]
코드로 들어가기 전에
[05:27]
어떻게 설정하면 되는지
[05:28]
보여드리고 싶습니다.
[05:30]
우선 먼저 설치
[05:32]
안내서로 이동하셔서
[05:33]
우리가 하려는 첫 번째 작업은
[05:35]
새로운 환경을 만드는 것입니다.
[05:37]
이 프로젝트를 실행하는 데 필요한
[05:40]
모든 의존성을 설정할 것입니다.
[05:41]
이를 위해 conda를 사용할 것입니다.
[05:43]
conda가 설치되면
[05:46]
환경을 활성화하고
[05:47]
필요한 모든
[05:49]
의존성을 설치할 것입니다.
[05:51]
우리의 경우 실제로
[05:52]
주요한 것은 하나뿐입니다.
[05:54]
Crawl4AI입니다. 이것으로 모든 것을
[05:56]
스크랩할 것이고
[05:57]
그 다음에는
[05:59]
모든 것을 설치한 후
[06:00]
필요한 나머지 정보는
[06:01]
Grock 대시보드로 이동하여
[06:03]
환경 파일에 API 키를
[06:06]
추가하는 것입니다.
[06:08]
프로젝트 설정에 필요한 것은 이게 전부이며
[06:10]
이후에는 바로
[06:11]
실행할 수 있습니다. python main만 실행하면 됩니다.
[06:13]
좋습니다. 이제 개요를 살펴봤으니
[06:15]
크롤러가 어떻게 생겼는지
[06:16]
실제 예시를 보면서
[06:18]
살펴보고, 이 간단한 예시를
[06:21]
확장하여 전체
[06:22]
예시를 살펴보도록 하겠습니다.
[06:25]
그럼 지금부터
[06:26]
간단한 예시를 살펴보겠습니다.
[06:28]
자, 빠르게 예시를 보도록 하겠습니다.
[06:30]
간단한 크롤러의 개요를
[06:31]
설명드리겠습니다. 이를 통해
[06:33]
핵심 구성 요소들을 이해하실 수 있을 것입니다.
[06:34]
웨딩 베뉴 전체를 스크래핑하기 전에
[06:36]
우리가 무엇을 하려고 하는지 살펴보겠습니다.
[06:38]
Crawl4AI 내에는 알아야 할
[06:40]
몇 가지 핵심 구성 요소가 있습니다.
[06:43]
첫 번째는 브라우저 설정입니다.
[06:46]
브라우저 설정은 실제로 어떤 브라우저를
[06:48]
실행할지 설정하는 방법입니다.
[06:50]
브라우저 설정에서 구체적으로
[06:52]
Chrome 브라우저를 열고 싶다고 선택할 수 있고
[06:54]
브라우저 창의 크기를
[06:56]
이만큼 설정하고 싶다고 지정할 수 있습니다
[06:59]
headless를 false로 설정하는데
[07:01]
headless false는 브라우저가
[07:02]
실제로 무엇을 하는지 보고 싶다는 의미입니다
[07:04]
저는 어떤 페이지를
[07:05]
실제로 스크래핑하는지 보는 것을 좋아하지만
[07:07]
백그라운드에서 실행하고 싶다면
[07:08]
headless true로 설정하면 되고
[07:09]
다른 추가 정보들도 설정할 수 있습니다
[07:12]
이것이 브라우저 설정의 핵심이고
[07:14]
그 다음으로 필요한 것은
[07:15]
크롤러 실행 설정을 하는 것입니다
[07:18]
여기 보시다시피
[07:20]
브라우저 설정과 크롤러
[07:22]
설정이 있습니다. 브라우저를 설정한 후에는
[07:25]
크롤링 방식을 선택할 수 있는데
[07:27]
실제로 무엇을 하고 싶은지 정하는 것입니다
[07:28]
여기서 우리는 많은
[07:30]
단순하거나 복잡한 설정을 할 수 있습니다
[07:32]
이 설정 내에서
[07:34]
몇 가지 핵심적인 것들을 선택할 수 있습니다
[07:36]
웹사이트를 크롤링할 때
[07:39]
이것이 LLM용으로 만들어졌기 때문에
[07:41]
여러 가지를 선택할 수 있습니다
[07:43]
DeepSeek 모델을 사용해서 정보를 추출하고
[07:47]
이 정보를 가져오고 싶다고 설정할 수 있죠
[07:49]
실제 작동하는 것을 곧 보실 텐데
[07:50]
저는 먼저
[07:51]
몇 가지 시드를 심어두고
[07:52]
페이지 로딩과 관련된
[07:54]
다양한 옵션들을 설정할 수 있습니다
[07:56]
예를 들어, 페이지가 복잡하고
[07:58]
정보가 바로 렌더링되지 않는다면
[08:00]
JavaScript 코드를 전달해서
[08:02]
'이 JavaScript 요소가 로드될 때까지
[08:04]
웹사이트를 스크래핑하지 말아주세요'라고
[08:06]
설정할 수 있습니다. 또는
[08:09]
스크린샷을 찍고 싶다고 할 수도 있고
[08:10]
여기서 할 수 있는 멋진 것들이
[08:12]
많이 있습니다
[08:13]
저는 일단
[08:14]
어떤 것들이 가능한지 보여드리고
[08:16]
코드에서 곧 보시겠지만
[08:18]
이것들 각각에 대한 링크가 있습니다
[08:19]
코딩할 때
[08:21]
문서로 돌아가서 볼 수 있는
[08:22]
링크가 있어서 '아 그래, 이게
[08:24]
내가 사용할 수 있는 모든 옵션이구나' 하고
[08:25]
확인할 수 있습니다
[08:26]
여러분이 이걸 보실 수 있어서 기쁩니다
[08:28]
자, 다음은 무엇을 할까요?
[08:29]
브라우저가 실행되도록 설정하고
[08:31]
실행 설정을 지정했으니
[08:33]
이제 실제로 크롤러를 실행할 수 있습니다
[08:35]
우리의 경우에는
[08:37]
'자, 이제 웹사이트를
[08:38]
스크래핑하고 싶은데, 이 브라우저를 열고
[08:40]
이렇게 해주세요'라고 지정합니다
[08:43]
이 URL을 스크래핑하고
[08:45]
스크래핑할 때 이 URL에서
[08:48]
이 실행 설정을 사용해 주세요
[08:51]
그러면 이것이
[08:53]
실제로 웹사이트를 스크래핑하고
[08:54]
전체 웹사이트를 스크래핑해서
[08:56]
그 웹사이트의 결과를
[08:57]
마크다운 파일로 깔끔하게 정리해줍니다
[08:59]
LLM들은 마크다운을 좋아하죠
[09:01]
그래서 이 결과를 저장하고
[09:03]
나중에 다른 작업을 위해
[09:04]
다른 LLM에 전달하기 좋은 방법입니다
[09:06]
이것이 Crawl4AI의 핵심입니다
[09:08]
이것이 Crawl4AI의 핵심입니다. 이제
[09:11]
준비가 되었으니
[09:12]
실제 코드로 넘어가서
[09:13]
어떻게 이 예제를 활용하고
[09:15]
확장하여 웨딩 베뉴 정보를
[09:17]
전체적으로 스크랩하고
[09:19]
필요한 모든 정보를 수집하여
[09:21]
깔끔한 엑셀 시트로
[09:22]
저장하는 방법을 보여드리겠습니다.
[09:25]
여기에 DeepSeek R1을 어떻게
[09:26]
추가할지 살펴보겠습니다.
[09:28]
자, 이제 코드를 살펴보겠습니다.
[09:29]
이제 재미있는 부분이 시작됩니다.
[09:30]
코드를 함께 살펴보면서
[09:31]
한 줄씩 자세히 이해해보겠습니다.
[09:33]
정확히 어떻게
[09:34]
DeepSeek과 Crawl4AI를 연동하여
[09:37]
웨딩 베뉴에 대한
[09:39]
잠재 고객 정보를 스크랩할 수 있는지
[09:41]
알아보겠습니다.
[09:42]
지금까지 배운 내용을
[09:44]
적용해보도록 하겠습니다.
[09:46]
현재 코드에서는 실제로
[09:48]
하나의 주요 기능만 있는데,
[09:49]
그것은 모든 베뉴를 크롤링하는 것입니다.
[09:52]
내부적으로 어떻게 작동하는지
[09:54]
큰 그림에서 살펴보고,
[09:56]
우리의 최종 목표와 연결해보겠습니다.
[09:58]
궁극적으로 우리는
[10:00]
이 웨딩 베뉴 사이트 전체를 크롤링하여
[10:03]
특정 도시의 모든 잠재 고객 정보를
[10:05]
수집하려고 합니다.
[10:07]
큰 그림에서 보면,
[10:08]
이제 단계별로 살펴볼 텐데,
[10:09]
우리는 계속해서 각 페이지를 스크랩하고
[10:12]
더 이상 스크랩할 페이지가 없을 때까지
[10:15]
계속 진행할 것입니다.
[10:17]
지금은 1페이지에 있고
[10:19]
결국 10페이지까지 가면
[10:22]
더 이상의 결과를
[10:24]
찾을 수 없게 될 것입니다.
[10:26]
목표는 더 이상 스크랩할 수 없을 때까지
[10:28]
계속 스크랩하는 것입니다.
[10:29]
이제 이것을 실제로 구현하기 위해
[10:31]
무엇을 설정해야 하는지
[10:33]
살펴보겠습니다. 큰 그림에서 보면
[10:35]
크롤러 설정을 시작하여
[10:38]
각 페이지를 스크랩하도록
[10:40]
해야 합니다.
[10:41]
빠르게 살펴보겠습니다.
[10:43]
먼저 이전 예제에서
[10:45]
브라우저 설정을 해야 합니다.
[10:47]
크롬 브라우저를 설정하여
[10:49]
창을 띄우고 페이지를 스크랩하면서
[10:51]
진행 상황을 모두 확인하고 싶습니다.
[10:54]
페이지를 스크랩하는 동안
[10:56]
모든 로그를 보고 싶습니다.
[10:57]
이해되시죠?
[10:59]
이제 새로운 부분을
[11:00]
살펴보겠습니다.
[11:02]
의미를 설명해드리고 싶은데,
[11:03]
LLM 전략을 설정해야 합니다.
[11:05]
이는 어떻게 스크랩하고
[11:08]
LLM을 사용하여 스크랩한 정보를
[11:12]
가치 있는 정보로 변환할지를 의미합니다.
[11:14]
우리의 경우
[11:16]
각각의 웨딩 베뉴를
[11:18]
스크랩하려고 합니다.
[11:20]
웨딩 베뉴 모델을 스크랩하고
[11:22]
다음 모델로 넘어가서
[11:24]
계속해서 다음 모델을
[11:26]
스크랩하면서
[11:27]
더 이상 스크랩할 것이 없을 때까지
[11:29]
진행할 것입니다.
[11:31]
말씀드렸던 것처럼 venue 모델이 있는데요,
[11:33]
우리가 코드베이스 내에
[11:35]
모델을 만든 것을 확인할 수 있습니다.
[11:37]
models 폴더 안에 venue 파일이 있고
[11:39]
각 venue에 대해 우리가 하려는 것은
[11:41]
이름과 위치, 그리고
[11:43]
사진작가에게 전달하는데 필요한
[11:46]
다른 정보들을 수집하는 것입니다.
[11:48]
자, 이제 우리가
[11:49]
어떤 정보를 수집하려 하는지
[11:51]
설명했는데, LLM 추출 전략이
[11:53]
무엇인지 설명드리겠습니다.
[11:54]
제가 생각하는 방식은
[11:56]
웹사이트를 스크래핑하면서
[11:58]
많은 원시 데이터를 받게 되는데
[12:00]
LLM에게 이 데이터를 보고
[12:02]
처리하도록 설정하는 것입니다.
[12:03]
우리의 경우에는
[12:05]
LLM에게 모든 웨딩 venue를
[12:07]
원시 데이터에서 추출하고
[12:09]
다양한 정보를 가져오라고
[12:11]
지시할 것입니다.
[12:13]
이름, 위치, 가격 등의 정보와
[12:15]
원시 데이터를 수집하고
[12:17]
한 문장으로 된 설명을 생성하게 됩니다.
[12:18]
여기서 주목할 점은 이 정보가
[12:20]
우리의 venue 모델과 직접 연결된다는 것입니다.
[12:23]
일대일 관계로,
[12:24]
LLM에게 필요한 작업을 지시하고
[12:26]
우리가 원하는 최종 모델을
[12:28]
생성하게 됩니다.
[12:30]
자, 이제 지시사항과 스키마에 대해
[12:32]
이해가 되셨길 바랍니다. 이제는
[12:34]
실제로 이 처리를 수행할
[12:36]
LLM 모델을 선택해야 하는데
[12:38]
여기서 Gro와 DeepSeek가 등장합니다.
[12:41]
우리는 Gro를 사용할 것이고
[12:43]
특히 Gro에서 제공하는
[12:45]
DeepSeek 모델을 사용해서
[12:48]
이 지시사항을 수행하고 모든 것을
[12:50]
venue 스키마로 변환할 것입니다.
[12:52]
참고로 말씀드리면
[12:54]
이를 변경할 수도 있는데
[12:55]
다른 무료 모델을 원한다면
[12:57]
강력한 컴퓨터가 있을 경우 Ollama를 사용해
[12:59]
로컬에서 Llama 3.1을 실행하거나
[13:01]
유료 모델을 선호한다면
[13:03]
쉽게 GPT-4나
[13:05]
4.0 Mini 등으로 변경할 수 있습니다.
[13:07]
또는 최근에 출시된 0.3 Mini도 가능합니다.
[13:10]
이해가 되셨죠?
[13:11]
자, 빠르게 정리해보면
[13:13]
브라우저를 설정하고
[13:14]
스크래핑을 하면서
[13:15]
LLM에게 정확히
[13:17]
어떤 정보를 스크래핑하고
[13:19]
추출해서 venue 객체를
[13:21]
만들어야 하는지 알려줍니다.
[13:23]
이제 재미있는 부분인
[13:24]
실제 구현으로 넘어가보죠.
[13:26]
기본 설정이 완료되었으니
[13:28]
스크래핑을 시작해보겠습니다.
[13:30]
과정을 살펴보면
[13:31]
먼저 하나의 크롤러를 생성합니다.
[13:34]
이 크롤러는
[13:35]
실제로 여러
[13:37]
웹페이지를 크롤링하면서
[13:38]
작업을 수행할 것이고
[13:40]
Chrome 브라우저를 열어서
[13:41]
스크래핑을 위한
[13:43]
기본 설정을 하게 됩니다.
[13:44]
크롤러가 생성되면
[13:46]
핵심 Fetch and process로 들어갑니다.
[13:49]
페이지 함수는 단순히
[13:51]
웨딩 장소를 찾고
[13:53]
더 이상 결과가 없는지 확인하는 것이 전부입니다.
[13:54]
자, 이제 이것들이
[13:56]
어떻게 연결되는지 자세히 살펴보겠습니다.
[13:58]
최대한 많은 주석을 달아놓았는데,
[14:00]
이는 여러분이
[14:01]
코드 내에서 데이터가
[14:03]
어떻게 움직이는지 정확히 이해할 수 있도록 하기 위해서입니다.
[14:05]
따라서 여러분이 직접
[14:06]
웹 스크래퍼를 만들 때
[14:07]
이 코드를 복사하고 수정하면 됩니다.
[14:09]
한 줄씩 살펴보겠습니다.
[14:11]
우리가 하려는 것은
[14:12]
스크래핑인데, 구체적으로
[14:14]
특정 URL을 스크래핑하려고 합니다.
[14:16]
URL은 기본 URL과
[14:18]
스크래핑하고 싶은
[14:19]
페이지 번호로 구성되어 있습니다.
[14:21]
우리의 경우에는 핵심 정보가 담긴
[14:23]
설정 파일이 준비되어 있습니다.
[14:25]
이 기본 URL을 스크래핑하겠다고
[14:26]
지정하면 되는데, 원하는 다른 URL로
[14:28]
변경할 수도 있습니다.
[14:29]
웨딩 장소를 스크래핑하고
[14:31]
1페이지부터 시작할 것입니다.
[14:32]
먼저 할 일은
[14:34]
실제로 확인해보는 것입니다.
[14:36]
페이지를 스크래핑하고
[14:38]
결과가 없는지 확인할 건데요,
[14:40]
보여드리겠습니다.
[14:41]
크롤러와 URL을 전달하고
[14:43]
'크롤러야, 이 페이지를 스크래핑해줘'라고
[14:46]
요청할 것입니다.
[14:49]
페이지를 스크래핑할 때
[14:51]
캐시는 저장하지 말고 바로
[14:54]
스크래핑만 하도록 할 것입니다.
[14:56]
페이지 어디에서든 '결과 없음'이라는 단어가
[14:59]
있는지 확인하는 것이 전부입니다.
[15:02]
페이지를 스크래핑하고 결과를 확인해서
[15:04]
모든 것이 성공적으로 반환되었다면
[15:06]
'결과 없음'이 있는지 확인합니다.
[15:08]
만약 있다면 우리가 마지막 페이지에
[15:10]
있다는 의미입니다. 예를 들어 10페이지라면
[15:12]
아주 마지막 페이지이고
[15:14]
더 이상 스크래핑할 것이 없다는 뜻이죠.
[15:15]
이해되셨길 바랍니다.
[15:17]
자, 이제 결과를 찾지 못했다면
[15:19]
true를 반환할 것이고
[15:20]
이는 여기서 일찍 종료할 수
[15:22]
있다는 의미입니다. 결과가 없으니
[15:24]
반환하고 일찍 종료하는 거죠.
[15:26]
이는 코드를 깔끔하게 유지하는
[15:28]
좋은 방법입니다. 단순한 조기 반환문이죠.
[15:30]
이게 전부입니다.
[15:31]
이제 페이지에 정보가 있고
[15:34]
'결과 없음' 페이지가 아니라면
[15:36]
실제로 페이지를
[15:38]
스크래핑할 수 있습니다. 하지만 이번에는
[15:40]
좀 더 자세한 스크래핑을 할 건데
[15:42]
이제부터
[15:43]
실제로 모든 웨딩
[15:45]
장소를 페이지에서 추출하기 시작할 것입니다.
[15:47]
작동 방식은 이렇습니다.
[15:48]
페이지를 다시 크롤링하되
[15:50]
이번에는 다르게 할 것입니다.
[15:53]
같은 페이지이지만
[15:54]
스크래핑 방식이
[15:55]
조금 다릅니다. 이번에는
[15:57]
두 가지 정보를
[15:59]
추가할 것입니다.
[16:00]
추출 전략과 CSS
[16:02]
선택자입니다. 설명해드리겠습니다.
[16:03]
무슨 일이 일어나고 있는지 설명해드리겠습니다.
[16:05]
CSS 선택자에 대해 말씀드리면, 이것은
[16:07]
수천 줄의 HTML 코드를 스크래핑하는 대신
[16:09]
웹 페이지에서 특정 요소만
[16:12]
처리하도록 지정하는 것입니다.
[16:15]
우리의 경우에는 구체적으로 살펴보면서
[16:17]
어떤 요소를 스크래핑할지 알아보겠습니다.
[16:19]
화면을 좀 더 크게 만들어보겠습니다.
[16:21]
우리 웹사이트 내에서
[16:23]
검사 모드로 들어가서 이 작은 커서를 클릭하면
[16:25]
요소들 위에 마우스를 올릴 수 있습니다.
[16:27]
이렇게 마우스를 올리면
[16:29]
이러한 요소들이 보이고
[16:31]
클릭하면 이 요소에 적용된
[16:33]
모든 클래스와 스타일을 볼 수 있습니다.
[16:35]
제가 스크래핑하고 싶은 특정 요소죠.
[16:38]
처음에 말씀드렸듯이
[16:39]
제가 하고 싶은 것은
[16:41]
더 구체적으로 말하면
[16:42]
이 정보들만 스크래핑하고 싶습니다.
[16:44]
이 정보와 그 다음 정보들을 말이죠.
[16:46]
어떻게 스크래핑할 수 있을까요?
[16:48]
여기 코드를 보면 각각의
[16:50]
웹페이지에서 마우스를 올리면
[16:52]
info-container라는 클래스가 있는 것을 볼 수 있습니다.
[16:55]
저는 이 웨딩 베뉴 사이트에서
[16:57]
모든 info-container만 스크래핑하고 싶습니다.
[16:59]
그리고 그게 바로 우리가 하고 있는 일입니다.
[17:01]
CSS 선택자로 돌아가보면
[17:03]
info-container라는 단어가 포함된
[17:04]
모든 클래스를 스크래핑하도록 지정했습니다.
[17:07]
이게 셋업을 위해 필요한 전부입니다.
[17:09]
이제 전체 웹사이트를 스크래핑하는 대신
[17:11]
모든 info-container만 가져오도록 했습니다.
[17:13]
이제 info-container를 보면서
[17:15]
우리가 앞서 설정한
[17:16]
LM 전략을 사용하여
[17:18]
DeepSeek를 사용해
[17:20]
모든 베뉴 정보를 스크래핑하도록 했습니다.
[17:22]
이제 모든 것이 어떻게 연결되는지
[17:24]
이해하실 수 있을 것입니다.
[17:25]
일반 스크래핑과 AI 스크래핑을
[17:28]
어떻게 결합하는지 보실 수 있죠.
[17:29]
이제 다음 단계로
[17:31]
웹사이트를 스크래핑한 후
[17:32]
추출된 콘텐츠의 결과를 확인해보겠습니다.
[17:35]
이제 웹사이트를 스크래핑했으니
[17:36]
추출된 콘텐츠의 결과를 볼 수 있습니다.
[17:38]
이것은 JSON 문자열이 될 것이고
[17:40]
모든 추출된 베뉴 정보가 포함될 것입니다.
[17:41]
그 다음에는 JSON 문자열을 로드하여
[17:44]
추출된 데이터를 얻게 됩니다.
[17:46]
이 추출된 데이터는
[17:47]
여기 있는 모델들의 모음입니다.
[17:49]
베뉴들의 리스트가 되는 거죠.
[17:51]
제가 볼 때는 꽤 멋진 것 같네요.
[17:53]
이게 전체 코드의 핵심 내용입니다.
[17:55]
이제 코드를 실행해서
[17:57]
정확히 어떤 일이 일어나는지
[17:59]
보여드리고 싶습니다.
[18:00]
그리고 진행되는 동안
[18:02]
설명을 해드리겠습니다.
[18:03]
방금 설명한 코드가 어떻게 작동하는지
[18:05]
이해하실 수 있도록요.
[18:06]
코드를 실행하면서
[18:07]
방금 설명한 모든 내용이
[18:09]
이해가 되도록 하겠습니다.
[18:10]
코드를 실행하기 시작하겠습니다.
[18:13]
진행되는 동안 설명해드리겠습니다.
[18:14]
먼저 해야 할 일은
[18:16]
터미널을 열고 conda 환경에
[18:18]
있는지 확인하는 것입니다.
[18:20]
제 환경을 보시면
[18:22]
딥시트 크롤러라고 표시되어 있네요.
[18:24]
이것은 우리가 이전에 만든 conda 환경입니다.
[18:25]
이제 python main.py를 실행할 수 있습니다.
[18:27]
이렇게 하면 우리의 코드가 실행되기 시작할 거예요.
[18:30]
실행하면 브라우저 창이 열릴 텐데,
[18:32]
headless를 False로 설정했기 때문이죠.
[18:33]
브라우저가 열리면서 스크래핑이 시작됩니다.
[18:36]
이제 URL에 설정해 둔
[18:37]
모든 웨딩 venue 페이지들을 스크래핑하기 시작할 거예요.
[18:39]
설정된 모든 venue 페이지를 스크래핑할 겁니다.
[18:42]
스크래핑하려는 URL 내의 모든 페이지를요.
[18:43]
화면을 축소해서 보여드리겠습니다.
[18:45]
정확히 어떤 일이 일어나는지 보실 수 있도록요.
[18:47]
페이지를 스크래핑하면서
[18:48]
여기서 보시면 2페이지로 이동하고
[18:50]
2페이지 스크래핑이 끝나면
[18:52]
3페이지로 이동하고
[18:53]
이런 식으로 계속 진행됩니다.
[18:55]
그리고 이 과정에서
[18:56]
터미널에서 보시면 verbose를 true로
[18:58]
설정했기 때문에
[19:00]
많은 로그들을 확인할 수 있습니다.
[19:02]
웹사이트를 스크래핑하면서
[19:03]
딥시크로 많은 API 호출을 하고 있죠.
[19:05]
특히 Grok에게 딥시크 모델을 실행해서
[19:08]
이 데이터에서 웨딩 venue를 찾아달라고
[19:10]
요청하고 있습니다.
[19:12]
그리고 진행 과정에서
[19:13]
다양한 로그들이 표시되는데
[19:16]
예를 들어 3페이지에서는
[19:18]
10개의 리드를 스크래핑했다는 것을 볼 수 있죠.
[19:20]
이런 식으로 계속 진행됩니다.
[19:22]
3페이지에서는 28개의 리드를 얻었고
[19:24]
이제 4페이지로 넘어갔네요.
[19:26]
진행되는 과정을 보면
[19:27]
흥미로운 점은 우리가 설정한 대로
[19:29]
정확히 작동하고 있다는 겁니다.
[19:31]
웨딩 venue를 처리하면서
[19:33]
venue의 이름이 Stillwater Pond이고
[19:35]
조지아 주 템플에 있는, 아마도 애틀랜타 근처일 거예요.
[19:37]
수용 인원과 설명도 확인할 수 있습니다.
[19:40]
여기 있는 정보를 기반으로요.
[19:42]
이렇게 계속 스크래핑이 진행됩니다.
[19:44]
좋은 점은
[19:45]
거의 끝나가고 있다는 거예요.
[19:46]
총 6페이지밖에 없는 것 같네요.
[19:48]
완료되면 '끝났다'는 메시지가 표시될 거예요.
[19:51]
더 이상 스크래핑할 것이 없다고 하면서
[19:53]
깔끔한 최종 요약을 보여줄 겁니다.
[19:54]
'스크래핑이 완료됐다'는 메시지와 함께
[19:56]
스크래핑이 끝나고
[19:58]
간단한 개요를 보여줄 텐데
[19:59]
모든 것을 스크래핑하는 데 사용된
[20:01]
토큰의 수를 알려줄 거예요.
[20:03]
그리고 모든 것을 CSV 파일로 저장했다고도 알려줍니다.
[20:06]
이제 마지막 페이지네요.
[20:07]
맨 아래로 스크롤하면
[20:09]
6페이지이고 더 이상 없는 것을 볼 수 있어요.
[20:10]
곧 종료될 거예요.
[20:12]
마지막 데이터를 추출했고
[20:13]
브라우저가 닫혔네요.
[20:15]
스크래핑과 크롤링이 모두 완료됐기 때문입니다.
[20:17]
이제 결과를 보여줄 텐데요.
[20:19]
사용한 모든 토큰 수를 보여줄 거예요.
[20:21]
총 43,000개의 토큰을 사용했네요.
[20:23]
이는 제한 범위 내에 있습니다.
[20:26]
Grok에서는 분당 약 60,000토큰까지 사용할 수 있거든요.
[20:27]
그리고 페이지별로 스크래핑한 내용도 확인할 수 있습니다.
[20:30]
상당히 많은 데이터를 수집했네요.
[20:33]
실제로 많은 양을 스크래핑했고
[20:34]
이제 다음으로
[20:36]
완성된 venue 데이터를 살펴보도록 하겠습니다.
[20:38]
시트를 보시면 정말 많은 정보를 수집했다는 걸 알 수 있습니다.
[20:41]
순식간에 이렇게 많은 정보를 얻었고
[20:43]
URL만 바꾸면 쉽게
[20:45]
다른 웹사이트도 스크래핑할 수 있죠.
[20:47]
전반적으로 필요한 모든 데이터를
[20:49]
스크래핑했고
[20:50]
이제 이 데이터를
[20:52]
구글 시트로 옮기기만 하면 됩니다.
[20:53]
지금부터 보여드릴 것은
[20:55]
구글 시트에서
[20:56]
깔끔한 표를 만드는 방법입니다.
[20:57]
새로운 CSV 데이터로
[20:59]
작업을 완료하면 끝이 납니다.
[21:01]
자, 이제 구글 시트로 이동했는데요.
[21:02]
여기서 우리가 코드로 만든
[21:04]
CSV 파일을 가져와서
[21:06]
실제로 임포트할 겁니다.
[21:08]
방금 코드에서 만든 파일을 가져올 건데
[21:10]
구글 시트에서 해야 할 일은
[21:12]
임포트 버튼을
[21:13]
클릭하는 것뿐입니다.
[21:15]
임포트를 클릭하면
[21:17]
업로드할 파일을 선택하라고 나오는데
[21:20]
CSV 파일을 끌어다 놓으면 됩니다.
[21:21]
스크래핑한 많은 정보가 들어있는
[21:24]
CSV를 임포트하면
[21:25]
모든 작업이 끝납니다.
[21:26]
데이터가 깔끔하게 정리되고
[21:27]
이제 시트에서는
[21:29]
방금 스크래핑한 모든 정보를 보여줍니다.
[21:31]
좋은 점은 구글 시트가
[21:32]
이것을 표로 변환하겠다고 제안한다는 거죠.
[21:34]
그러면 아주 보기 좋은 표가 완성됩니다.
[21:37]
이제 이걸 바로 클라이언트와 공유할 수 있고
[21:39]
클라이언트가 들어와서 볼 수 있죠.
[21:41]
이제 가격, 수용 인원, 평점, 리뷰로
[21:43]
필터링도 할 수 있습니다.
[21:46]
게다가 AI가 생성한
[21:47]
웨딩 베뉴에 대한 간단한 설명도
[21:50]
포함되어 있어서
[21:51]
장소의 특징과 모습을 알 수 있습니다.
[21:53]
전반적으로 정말 멋진 결과네요.
[21:56]
이 도구가 얼마나 강력한지 아시겠죠?
[21:58]
여러분들이
[22:00]
자신의 클라이언트를 위해 웹사이트를
[22:02]
스크래핑하실 때 이 AI 웹 스크래퍼와
[22:04]
DeepSeek Gro, Crawl4AI를 사용하실 수 있을 겁니다.
[22:06]
이것으로 이번 영상을 마치겠습니다.
[22:08]
AI 웹 스크래퍼 만드는 법을
[22:10]
배우는 걸 즐기셨길 바랍니다.
[22:12]
여러분이 앞으로 만드실
[22:14]
것들이 정말 기대되네요.
[22:16]
마지막으로 알려드릴 것이
[22:17]
이 영상의 모든 소스 코드는
[22:18]
아래 설명란에 무료로 제공됩니다.
[22:20]
그리고 비슷한 생각을 가진 AI 개발자들과
[22:22]
소통하고 싶으시다면
[22:23]
무료 스쿨 커뮤니티를 이용하세요.
[22:25]
자세한 내용은 역시
[22:27]
설명란에 있습니다.
[22:29]
이 채널에는 다른 AI 관련
[22:31]
콘텐츠도 많이 있어요.
[22:33]
LangChain 등 다양한 내용이 있으니
[22:34]
다음에 추천되는 영상을
[22:36]
꼭 확인해 보세요.
[22:37]
다음 영상에서 만날 때까지
[22:39]
여러분 모두 좋은 하루 보내세요. 안녕히 계세요!