이 가이드에서는 다음을 배울 수 있습니다:
- 웹 스크래핑이 실제 데이터로 LLM을 강화하는 탁월한 방법인 이유
- LangChain 워크플로우에서 스크래핑된 데이터 활용의 장점과 과제
- LangChain에서 스크래핑 통합을 간소화하는 라이브러리
- 단계별 튜토리얼로 LangChain 웹 스크래핑 통합을 완성하는 방법
자, 시작해 보겠습니다!
웹 스크래핑을 활용한 LLM 애플리케이션 강화
웹 스크래핑은 웹 페이지에서 데이터를 추출하는 과정입니다. 이렇게 추출된 데이터는대규모 언어 모델(LLM)과 통합되어 RAG(검색 강화 생성) 애플리케이션의 원동력이 될 수 있습니다.
RAG 시스템은 온라인에서 구매하거나 다운로드할 수 있는 정적 데이터 세트에서는 쉽게 구할 수 없는 풍부하고 최신이며 실시간, 특정 분야별 또는 방대한 데이터에 대한 접근이 필요합니다. 웹 스크래핑은 뉴스 기사, 제품 목록, 소셜 미디어 등 다양한 출처에서 추출한 구조화된 정보를 제공함으로써 이러한 격차를 해소합니다.
LLM 훈련 데이터 수집에 관한 당사 기사에서 자세히 알아보세요.
LangChain에서 스크래핑된 데이터 활용의 장점과 과제
LangChain은 AI 기반 워크플로우 구축을 위한 강력한 프레임워크로, 다양한 데이터 소스와 LLM의 통합을 간소화합니다. LLM과 실시간 도메인 특화 지식을 결합하여 데이터 분석, 요약, 질문응답에 탁월합니다. 그러나 고품질 데이터 확보는 항상 문제입니다.
웹 스크래핑이 이 문제를 해결할 수 있지만, 봇 방지 조치, CAPTCHA, 동적 웹사이트 등 여러 도전 과제가 따릅니다. 규정 준수 및 효율적인 스크래퍼 유지 관리 역시 시간 소모적이고 기술적으로 복잡할 수 있습니다. 자세한 내용은 스크래핑 방지 조치 가이드를 참조하세요.
이러한 장애물은 실시간 데이터에 의존하는 AI 기반 애플리케이션 개발을 지연시킬 수 있습니다. 해결책은? Bright Data의 웹 스크레이퍼API—수백 개의 웹사이트에 대한 스크래핑 엔드포인트를 제공하는 즉시 사용 가능한 도구입니다.
IP 로테이션, CAPTCHA 해결, 자바스크립트 렌더링과 같은 고급 기능을 통해 Bright Data는 데이터 추출을 자동화합니다. 이를 통해 신뢰할 수 있고 효율적이며 번거로움 없는 데이터 수집이 가능하며, 간단한 API 호출만으로 접근할 수 있습니다.
LangChain Bright Data 도구
Bright Data의 웹 스크레이퍼 API 및 기타 스크레이핑 도구를 LangChain 워크플로에 직접 통합할 수는 있지만, 이를 위해서는 맞춤형 로직과 반복적인 코드가 필요합니다. 시간과 노력을 절약하려면 공식 LangChain Bright Data 통합 패키지인 langchain-brightdata를 사용하는 것이 좋습니다.
이 패키지를 사용하면 LangChain 워크플로 내에서 Bright Data 서비스에 연결할 수 있습니다. 특히 다음과 같은 클래스를 제공합니다:
BrightDataSERP: Bright Data의 SERP API와 통합되어 지리적 타겟팅이 적용된 검색 엔진 쿼리를 수행합니다.BrightDataUnblocker: Bright Data의 Web Unlocker와 연동하여 지역 제한이 있거나 봇 방지 시스템으로 보호되는 웹사이트에 접근합니다.BrightDataWebScraperAPI: Bright Data의 Web Scraper API와 연동하여 다양한 도메인에서 구조화된 데이터를 추출합니다.
이 튜토리얼에서는 BrightDataWebScraperAPI 클래스 사용에 집중하겠습니다. 이제 그 방법을 살펴볼 시간입니다!
Bright Data 기반 LangChain 웹 스크래핑: 단계별 가이드
이 섹션에서는 LangChain 웹 스크래핑 워크플로우 구축 방법을 배웁니다. 목표는 LangChain을 활용하여 Bright Data의 Web Scraper API로 LinkedIn 프로필의 콘텐츠를 추출한 후, OpenAI를 사용하여 후보자가 특정 직무에 적합한지 평가하는 것입니다.
참고 자료로는 제 공개 LinkedIn 프로필 페이지를 사용하겠지만, 다른 LinkedIn 프로필도 동일하게 적용 가능합니다:

참고: 여기서 구축하는 것은 단순한 예시입니다. 작성할 코드는 다양한 시나리오에 쉽게 적용 가능합니다. 즉, LangChain의 추가 기능을 통해 확장할 수도 있습니다. 예를 들어, SERP 데이터를 기반으로 한 RAG 챗봇을 만들 수도 있습니다.
시작하려면 아래 단계를 따르세요!
필수 준비 사항
이 튜토리얼을 진행하려면 다음이 필요합니다:
- 컴퓨터에 설치된 Python 3+
- OpenAI API 키
- Bright Data 계정
이 중 하나라도 준비되지 않았더라도 걱정하지 마세요. Python 설치부터 OpenAI 및 Bright Data 자격 증명 획득까지 전체 과정을 안내해 드리겠습니다.
1단계: 프로젝트 설정
먼저, 컴퓨터에 Python 3이 설치되어 있는지 확인하세요. 설치되어 있지 않다면 다운로드하여 설치하세요.
터미널에서 다음 명령어를 실행하여 프로젝트 폴더를 생성하세요:
mkdir langchain-scraping
langchain-scraping 폴더에는 Python LangChain 스크래핑 프로젝트가 포함됩니다.
그런 다음 프로젝트 폴더로 이동하여 내부에서 Python 가상 환경을 초기화하세요:
cd langchain-scraping
python3 -m venv venv
참고: Windows에서는 python3 대신 python을 사용하세요.
이제 선호하는 Python IDE로 프로젝트 디렉토리를 엽니다. PyCharm Community Edition이나 Python 확장 프로그램이 설치된 Visual Studio Code를 사용하면 됩니다.
langchain-scraping 내부에서 script.py 파일을 추가하세요. 이 파일은 비어 있는 Python 스크립트이지만, 곧 LangChain 웹 스크래핑 로직이 포함될 것입니다.
IDE 터미널에서 Linux 또는 macOS의 경우 아래 명령어로 가상 환경을 활성화하세요:
source venv/bin/activate
Windows에서는 다음 명령을 실행하세요:
venv/Scripts/activate
완벽합니다! 이제 모든 설정이 완료되었습니다.
2단계: 필요한 라이브러리 설치
Python LangChain 스크래핑 프로젝트는 다음 라이브러리에 의존합니다:
python-dotenv:.env파일에서 환경 변수를 로드합니다. Bright Data 및 OpenAI API 키 관리를 위해 사용됩니다.langchain-openai:openaiSDK를 통한 OpenAI용 LangChain 통합 라이브러리입니다.langchain-brightdata: Bright Data 스크래핑 서비스와의 LangChain 통합.
활성화된 가상 환경에서 다음 명령어로 모든 종속성을 설치하세요:
pip install python-dotenv langchain-openai langchain-brightdata
훌륭합니다! 이제 스크래핑 로직을 작성할 준비가 되었습니다.
3단계: 프로젝트 준비
script.py 파일에 다음 임포트를 추가하세요:
from dotenv import load_dotenv
그런 다음 프로젝트 폴더에 모든 인증 정보를 저장할 .env 파일을 생성하세요. 현재 프로젝트 파일 구조는 다음과 같아야 합니다:

script.py에 다음 줄을 추가하여 python-dotenv가 .env에서 환경 변수를 로드하도록 지시하세요:
load_dotenv()
좋아요! 이제 Bright Data의 웹 스크레이퍼 API 솔루션을 구성할 차례입니다.
4단계: 웹 스크레이퍼 API 구성
본문 초반에 언급했듯이 웹 스크래핑에는 여러 가지 어려움이 따릅니다. 다행히 Bright Data의 웹 스크래퍼 API와 같은 올인원 솔루션을 사용하면 훨씬 수월해집니다. 이 API를 통해 120개 이상의 웹사이트에서 파싱된 콘텐츠를 손쉽게 가져올 수 있습니다.
langchain_brightdata를 사용하여 LangChain에서 웹 스크레이퍼 API를 설정하려면 아래 지침을 따르세요. Bright Data의 스크레이핑 솔루션에 대한 일반적인 소개는 공식 문서를 참조하세요.
아직 계정이 없다면 Bright Data 계정을 생성하세요. 로그인 후 계정 대시보드로 이동합니다. 여기서 왼쪽 하단에 위치한 “계정 설정” 버튼을 클릭하세요:

“계정 설정” 페이지에서, 이미 Bright Data API 토큰을 생성한 경우 “…”을 클릭한 후 “토큰 복사” 옵션을 선택하세요:

그렇지 않은 경우 “토큰 추가” 버튼을 클릭하세요:

다음 모달이 표시됩니다. Bright Data API 토큰을 구성하고 “저장” 버튼을 누르세요:

새 API 토큰을 받게 됩니다:

Bright Data API 키 값을 복사하세요.
.env 파일에서 이 정보를 BRIGHT_DATA_API_KEY 환경 변수로 저장하세요:
BRIGHT_DATA_API_KEY="<YOUR_BRIGHT_DATA_API_KEY>"
모달/테이블에서 복사한 값으로 <YOUR_BRIGHT_DATA_API_KEY> 를 대체하세요.
이제 script.py에서 langchain_brightdata를 임포트하세요:
from langchain_brightdata import BrightDataWebScraperAPI
langchain_brightdata가 BRIGHT_DATA_API_KEY 환경 변수에서 Bright Data API 키를 자동으로 읽어오므로 추가 작업이 필요하지 않습니다.
이제 LangChain에서 웹 스크레이퍼 API를 사용할 수 있습니다.
단계 #5: 웹 스크래핑을 위한 Bright Data 사용
langchain_brightdata는 BrightDataWebScraperAPI 클래스를 통해 Bright Data의 웹 스크레이퍼 API와의 통합을 지원합니다.
아래는 해당 클래스의 작동 방식에 대한 개요입니다:
- 스크래핑할 페이지의 URL을 받아, 구성된 웹 스크레이퍼 API에 동기식 요청을 보냅니다.
- 지정된 URL에서 데이터를 가져와 파싱하기 위해 클라우드 기반 스크래핑 작업이 시작됩니다.
- 라이브러리는 스크래핑 작업이 종료될 때까지 대기한 후, 스크래핑된 데이터를 JSON 형식으로 반환합니다.
LangChain 워크플로에 웹 스크래핑을 통합하려면 다음 코드로 재사용 가능한 함수를 정의하세요:
def get_scraped_data(url, dataset_type):
# LangChain Bright Data Scraper API 통합 클래스 초기화
web_scraper_api = BrightDataWebScraperAPI()
# 웹 스크레이퍼 API에 연결하여 관심 데이터 가져오기
results = web_scraper_api.invoke({
"url": url,
"dataset_type": dataset_type
})
return results
이 함수는 다음 인수를 받습니다:
url: 데이터를 추출할 페이지의 URL.dataset_type: 페이지에서 데이터를 추출하기 위해 사용할 웹 스크레이퍼 API 유형을 지정합니다. 예를 들어,"linkedin_person_profile"은제공된 공개 LinkedIn 프로필 URL에서 데이터를 스크레이핑하도록 웹 스크레이퍼 API에 지시합니다.
이 예제에서는 다음과 같이 호출합니다:
url = "https://linkedin.com/in/antonello-zanini"
scraped_data = get_scraped_data(url, "linkedin_person_profile")
scraped_data에는 다음과 같은 데이터가 포함됩니다:
{
"input": {
"url": "https://linkedin.com/in/antonello-zanini"
},
"id": "antonello-zanini",
"name": "Antonello Zanini",
# 간결함을 위해 생략...
"about": "저는 프리랜서 소프트웨어 엔지니어, 기술 편집자, 기술 작가로 수백 건의...",
"current_company": {
"name": "프리랜서"
},
"current_company_name": "프리랜서",
# 생략...
"languages": [
{
"title": "이탈리아어",
"subtitle": "모국어 또는 이중 언어 수준"
},
{
"title": "영어",
"subtitle": "전문적인 완벽한 숙련도"
},
{
"title": "스페인어",
"subtitle": "완벽한 업무 수준"
}
],
"추천_수": 32,
"추천": [
# 생략...
],
"게시물": [
# 생략...
],
"activity": [
# 생략...
],
# 생략...
}
자세히 설명하자면, 대상 LinkedIn 프로필 페이지의 공개 버전에 있는 모든 정보를 JSON 형식으로 구조화하여 저장합니다. 이 데이터를 얻기 위해 Web Scraper API는 모든 봇 방지 및 스크래핑 방지 메커니즘을 우회했습니다.
대단하네요! 방금 LangChain에서 웹 스크래핑을 위해 Bright Data Web의 Scraper API를 사용하는 방법을 배웠습니다.
6단계: OpenAI 모델 사용 준비
이 예제는 LangChain 내 LLM 통합을 위해 OpenAI 모델에 의존합니다. 해당 모델을 사용하려면 환경 변수에 OpenAI API 키를 구성해야 합니다.
따라서 .env 파일에 다음 줄을 추가하세요:
OPENAI_API_KEY="<YOUR_OPEN_API_KEY>"
<YOUR_OPENAI_API_KEY> 를 여러분의 OpenAI API 키 값으로 대체하세요. 키를 얻는 방법을 모르신다면 공식 가이드를 따르세요.
이제 script.py 파일에서 langchain_openai를 다음과 같이 임포트하세요:
from langchain_openai import ChatOpenAI
추가 작업은 필요 없습니다. langchain_openai는 OPENAI_API_KEY 환경 변수에서 OpenAI API 키를 자동으로 검색합니다.
좋습니다! 이제 LangChain 스크래핑 스크립트에서 OpenAI 모델을 사용할 차례입니다.
7단계: LLM 프롬프트 생성
스크래핑된 데이터를 받아 LLM용 프롬프트를 생성하는 f-string 변수를 정의하세요. 이 경우 프롬프트에는 HR 요청 내용이 포함되며 스크래핑된 후보자 데이터가 임베드됩니다:
prompt = f"""
"이 후보자가 원격 근무 소프트웨어 엔지니어 직위에 적합하다고 생각하시나요? 이유는 무엇인가요?
150단어 이내로 답변해 주세요.
CANDIDATE:
'{scraped_data}'
"""
이 예시에서는 LangChain을 사용해 HR 어드바이저 AI 워크플로를 구축하고 있습니다. 120개 이상의 도메인을 지원하는 웹 스크레이퍼 API의 유연성과 LLM의 결합 덕분에, 이 접근 방식을 다양한 다른 LangChain 워크플로에 쉽게 적용할 수 있습니다.
💡 아이디어: 더 큰 유연성을 위해 .env 파일에서 프롬프트를 읽어오는 것을 고려해 보세요.
현재 예시에서 전체 프롬프트는 다음과 같습니다:
이 후보자가 원격 근무 소프트웨어 엔지니어 직위에 적합하다고 생각하시나요? 이유는 무엇인가요?
150단어 이내로 답변해 주세요.
CANDIDATE:
'{
"input": {
"url": "https://linkedin.com/in/antonello-zanini"
},
"id": "antonello-zanini",
"name": "Antonello Zanini",
// 생략...
"about": "저는 프리랜서 소프트웨어 엔지니어이자 기술 편집자, 기술 작가로 수백 건의...",
},
[생략...]'
ChatGPT에 이 데이터를 입력하면 원하는 결과를 얻을 수 있습니다:

이 정도면 프롬프트가 완벽하게 작동한다는 걸 알 수 있겠죠!
8단계: OpenAI 통합
앞서 생성한 프롬프트를 GPT-4o mini AI 모델로 구성된 ChatOpenAI LangChain 객체에 전달하세요:
model = ChatOpenAI(model="gpt-4o-mini")
response = model.invoke(prompt)
AI 처리 완료 시 response.content에는 이전 단계에서 ChatGPT가 생성한 평가 결과와 유사한 결과가 포함되어야 합니다. 해당 텍스트 응답은 다음과 같이 접근하세요:
evaluation = response.content
와! LangChain 웹 스크래핑 로직이 완성되었습니다.
9단계: AI 처리된 데이터 내보내기
이제 LangChain을 통해 선택한 AI 모델이 생성한 데이터를 JSON 파일과 같은 사람이 읽을 수 있는 형식으로 내보내기만 하면 됩니다.
먼저 원하는 데이터로 사전(dictionary)을 초기화합니다. 그런 다음 아래와 같이 내보내고 JSON 파일로 저장합니다:
export_data = {
"url": url,
"evaluation": evaluation
}
file_name = "analysis.json"
with open(file_name, "w") as file:
json.dump(export_data, file, indent=4)
Python 표준 라이브러리에서 json을 임포트합니다:
import json
축하합니다! 스크립트 준비 완료.
10단계: 로그 추가
웹 스크래핑 AI와 ChatGPT 분석을 활용한 스크래핑 과정은 시간이 다소 소요될 수 있습니다. 이는 타사 서비스에서 데이터를 스크래핑하고 처리하는 데 수반되는 오버헤드 때문이며 정상적인 현상입니다. 따라서 스크립트 진행 상황을 추적하기 위해 로깅을 포함하는 것이 좋습니다.
다음과 같이 스크립트의 주요 단계에 print 문을 추가하여 구현하세요:
url = "https://linkedin.com/in/antonello-zanini"
print(f"{url}에서 Web Scraper API로 데이터 스크래핑 중...")
scraped_data = get_scraped_data(url, "linkedin_person_profile")
print("데이터 스크래핑 성공")
print("AI 프롬프트 생성 중...")
prompt = f"""
"이 후보자가 원격 근무 소프트웨어 엔지니어 직위에 적합하다고 생각하시나요? 이유는 무엇인가요?
150단어 이내로 답변해 주세요.
후보 정보:
'{scraped_data}'
"""
print("프롬프트 생성 완료n")
print("ChatGPT에 프롬프트 전송 중...")
model = ChatOpenAI(model="gpt-4o-mini")
response = model.invoke(prompt)
evaluation = response.content
print("ChatGPT 응답 수신 완료n")
print("데이터를 JSON으로 내보내는 중...")
export_data = {
"url": url,
"evaluation": evaluation
}
file_name = "analysis.json"
with open(file_name, "w") as file:
json.dump(export_data, file, indent=4)
print(f"Data exported to '{file_name}'")
LangChain 웹 스크래핑 워크플로의 각 단계가 명확하게 기록됨을 유의하십시오. 이제 터미널에서의 실행 과정을 훨씬 쉽게 따라갈 수 있습니다.
11단계: 모든 것을 통합하기
최종 script.py 파일은 다음과 같아야 합니다:
from dotenv import load_dotenv
from langchain_brightdata import BrightDataWebScraperAPI
from langchain_openai import ChatOpenAI
import json
# .env 파일에서 환경 변수 로드
load_dotenv()
def get_scraped_data(url, dataset_type):
# LangChain Bright Data Scraper API 통합 클래스 초기화
web_scraper_api = BrightDataWebScraperAPI()
# 웹 스크레이퍼 API에 연결하여 관심 데이터 가져오기
results = web_scraper_api.invoke({
"url": url,
"dataset_type": dataset_type
})
return results
# 지정된 웹 페이지에서 콘텐츠 가져오기
url = "https://linkedin.com/in/antonello-zanini"
print(f"{url}에서 웹 스크레이퍼 API로 데이터 스크레이핑 중...")
# 웹 스크레이퍼 API를 사용해 스크레이핑된 데이터 가져오기
scraped_data = get_scraped_data(url, "linkedin_person_profile")
print("데이터 성공적으로 추출됨n")
print("AI 프롬프트 생성 중...")
# 추출된 데이터를 컨텍스트로 사용하여 프롬프트 정의
prompt = f"""
"이 후보자가 원격 근무 소프트웨어 엔지니어 직위에 적합하다고 생각하시나요? 이유는 무엇인가요?
150단어 이내로 답변해 주세요.
지원자 정보:
'{scraped_data}'
"""
print("프롬프트 생성 완료n")
# 프롬프트에 명시된 작업을 ChatGPT에 요청
print("ChatGPT에 프롬프트 전송 중...")
model = ChatOpenAI(model="gpt-4o-mini")
response = model.invoke(prompt)
# AI 결과 획득
evaluation = response.content
print("ChatGPT 응답 수신n")
print("JSON으로 데이터 내보내기 중...")
# 생성된 데이터를 JSON으로 내보냄
export_data = {
"url": url,
"evaluation": evaluation
}
# 출력 사전(dictionary)을 JSON 파일로 작성
file_name = "analysis.json"
with open(file_name, "w") as file:
json.dump(export_data, file, indent=4)
print(f"데이터가 '{file_name}'로 내보내졌습니다")
믿을 수 있나요? 약 50줄의 코드로 AI 기반 LangChain 웹 스크래핑 스크립트를 만들었습니다.
다음 명령어로 작동 여부를 확인하세요:
python3 script.py
Windows에서는:
python script.py
터미널 출력은 다음과 같아야 합니다:
https://linkedin.com/in/antonello-zanini의 Web Scraper API로 데이터 스크래핑 중...
데이터 스크래핑 성공
AI 프롬프트 생성 중...
프롬프트 생성 완료
ChatGPT에 프롬프트 전송 중...
ChatGPT로부터 응답 수신
데이터를 JSON으로 내보내는 중...
데이터가 'analysis.json'으로 내보내짐
프로젝트 디렉터리에 생성된 analysis.json 파일을 열면 다음과 같은 내용을 확인할 수 있습니다:
{
"url": "https://linkedin.com/in/antonello-zanini",
"evaluation": "Antonello Zanini는 원격 소프트웨어 엔지니어 직위에 적합한 유력한 후보자로 보입니다. 프리랜서 소프트웨어 엔지니어로서의 경험은 원격 근무에 필수적인 적응력과 자기 주도성을 보여줍니다. 기술 문서 작성 및 편집 경험은 원격 팀과의 협업에 필수적인 탁월한 커뮤니케이션 능력을 시사합니다. 또한 유닛 테스트 및 자바스크립트 번들러 관련 게시물로 입증된 다양한 프로그래밍 지식은 그의 기술적 전문성을 강화합니다.nn그는 고객으로부터 상당한 긍정적 피드백을 받았으며, 이는 효과적인 원격 협업에 중요한 특성인 결과물의 신뢰성과 명확성을 강조합니다. 더불어 이탈리아어, 영어, 스페인어에 능통한 다국어 능력은 다양한 국제 팀 내 커뮤니케이션을 향상시킬 수 있습니다. 종합적으로, Antonello의 기술 숙련도, 커뮤니케이션 능력, 긍정적인 추천이 결합되어 원격 근무에 탁월한 적합성을 보여줍니다."
}
자, 이제 실시간 데이터로 강화된 HR 랭체인 워크플로가 완성되었습니다.
결론
이 튜토리얼에서는 웹 스크래핑이 AI 워크플로우를 위한 데이터 수집에 효과적인 방법인 이유와 LangChain을 사용하여 해당 데이터를 분석하는 방법을 알아보았습니다.
구체적으로, LinkedIn 프로필 페이지에서 데이터를 추출하고 OpenAI API를 사용하여 처리하는 Python 기반 LangChain 웹 스크래핑 스크립트를 만들었습니다. 이 LangChain 워크플로는 HR 업무 지원에 이상적이지만, 제시된 코드는 다른 워크플로와 시나리오로 쉽게 확장할 수 있습니다.
LangChain에서 웹 스크래핑의 주요 과제는 다음과 같습니다:
- 온라인 사이트는 종종 페이지 구조를 변경합니다.
- 많은 사이트가 고급 봇 방지 조치를 구현합니다.
- 대량의 데이터를 동시에 검색하는 것은 복잡하고 비용이 많이 들 수 있습니다.
Bright Data의 웹 스크레이퍼 API는 주요 웹사이트에서 데이터를 추출하는 효과적인 솔루션으로, 이러한 과제들을 손쉽게 극복합니다. LangChain과의 원활한 통합 덕분에 RAG 애플리케이션 및 기타 LangChain 기반 솔루션을 지원하는 데 있어 귀중한 도구입니다.
AI 및 LLM을 위한 추가 서비스도 꼭 살펴보시기 바랍니다 .
지금 바로 가입하여 Bright Data의 프록시 서비스 또는 스크래핑 제품 중 귀사의 요구사항에 가장 적합한 솔루션을 확인해 보세요. 무료 체험으로 시작하세요!