Chapter 1 네이버 정적 스크랩핑,크롤러 프로젝트
📌 네이버 블로그 크롤링 및 AI 분석 프로젝트
오늘 진행한 프로젝트는 네이버 블로그에서 사용자가 입력한 키워드로 검색을 진행하고, 검색 결과를 크롤링하여 블로그의 제목, 링크, 작성자, 요약 내용을 출력하는 작업이었습니다. 또한, 크롤링한 데이터에 대해 AI 분석을 요청할 수 있는 기능도 추가하였습니다. 이 프로젝트는 웹 스크래핑과 AI 분석을 결합하여 자동화된 작업을 진행하는 방법을 배운 실습입니다.
🚦 프로젝트 개요
목표: 사용자로부터 입력받은 검색어로 네이버 블로그를 검색하고, 검색된 블로그들의 제목, 링크, 작성자, 요약 내용을 추출하여 출력하는 프로그램을 구현하는 것이었습니다. 추가적으로, 각 게시글에 대해 AI 분석을 요청할 수 있는 기능을 구현했습니다.
💻 코드 분석
1. 필요한 라이브러리 설치
웹 요청을 보내고 데이터를 파싱하는 데 필요한 라이브러리 requests와 BeautifulSoup을 사용합니다.
import requests
from bs4 import BeautifulSoup
2. 사용자 입력 처리
사용자로부터 검색어를 입력받습니다. 이 검색어는 네이버 검색 URL에 적용되어 검색 결과를 가져오는 데 사용됩니다.
# 사용자가 원하는 검색어 입력
search_query = input("검색할 키워드를 입력하세요: ")
3. 검색 URL 생성
입력된 검색어를 바탕으로 네이버 검색 URL을 동적으로 생성합니다. 이 URL은 블로그 검색을 위한 네이버 검색 URL 형식에 맞게 작성됩니다.
# URL에 입력된 검색어를 적용하여 네이버 검색 URL 생성
url = f"https://search.naver.com/search.naver?ssc=tab.blog.all&sm=tab_jum&query={search_query}"
4. 웹 페이지 요청 및 HTML 파싱
requests.get()을 사용하여 생성된 URL에 HTTP 요청을 보내고, 그 응답으로 받은 HTML 페이지를 BeautifulSoup으로 파싱합니다. 이 후, 파싱된 HTML에서 원하는 데이터를 추출할 수 있습니다.
# 요청 보내기
req = requests.get(url)
html = req.text
# BeautifulSoup로 파싱
soup = BeautifulSoup(html, "html.parser")
5. 블로그 게시글 추출
select() 메서드를 사용하여 블로그 게시글 영역을 추출합니다. 각 게시글은 .view_wrap 클래스로 감싸져 있기 때문에, 이를 기준으로 데이터를 추출합니다.
# 블로그 게시글의 결과를 추출
result = soup.select(".view_wrap")
6. 검색 결과 출력
크롤링한 각 블로그 게시글에서 제목, 링크, 작성자, 요약 내용을 추출하여 출력합니다. 또한, 광고 게시글을 구분하여 광고 여부도 함께 출력합니다.
# 결과가 없으면 에러 처리
if not result:
print("검색 결과가 없습니다. 다른 키워드를 시도해 주세요.")
else:
# 각 게시글의 정보 출력
for i in result:
ad_element = i.select_one(".link_ad") # 광고 요소를 찾음
if ad_element:
ad = True # 광고가 있을 때
else:
ad = False # 광고가 없을 때
# 출력 부분
title = i.select_one(".title_link").text.strip()
link = i.select_one(".title_link")["href"]
writer = i.select_one(".name").text.strip() # 작성자
dsc = i.select_one(".dsc_link").text.strip() # 요약내용
print(f"제목 : {title}")
print(f"링크 : {link}")
print(f"작성자 : {writer}")
print(f"글요약 : {dsc}")
print(f"광고 여부 : {ad}")
print("-----------------------------------------------------------------------------------------------------------------------------------------------------------------")
7. AI 분석 기능
AI 분석을 요청할 수 있는 기능을 추가하였습니다. 사용자가 "트렌드 분석을 요청하시겠습니까?"라고 묻고, **'y'**를 입력하면 AI 분석을 실행하도록 설정했습니다. 예시로는 GPT API와 연결하여 텍스트 분석을 요청하는 기능을 추가할 수 있습니다.
# AI 분석 기능 예시 (이 부분은 실제 API 요청을 통해 분석 요청할 수 있음)
print("\n트렌드 분석을 요청하시겠습니까? (y/n)")
choice = input()
if choice.lower() == 'y':
print("AI 분석을 시작합니다...")
# AI API 요청을 여기서 할 수 있음 (예: OpenAI API를 이용하여 분석 요청)
# 예시로는 GPT API와 연동하여 텍스트 분석을 요청할 수 있습니다.
# 예시 요청 (OpenAI API 사용):
# result = openai.Completion.create(
# engine="text-davinci-003",
# prompt=f"다음 블로그 글들을 기반으로 트렌드 분석을 해줘: {dsc}",
# max_tokens=150
# )
# print(result.choices[0].text.strip())
else:
print("트렌드 분석을 건너뜁니다.")
✅ 전체코드
import requests
from bs4 import BeautifulSoup
# 사용자가 원하는 검색어 입력
search_query = input("검색할 키워드를 입력하세요: ")
# URL에 입력된 검색어를 적용하여 네이버 검색 URL 생성
url = f"https://search.naver.com/search.naver?ssc=tab.blog.all&sm=tab_jum&query={search_query}"
# 요청 보내기
req = requests.get(url)
html = req.text
# BeautifulSoup로 파싱
soup = BeautifulSoup(html, "html.parser")
# 블로그 게시글의 결과를 추출
result = soup.select(".view_wrap")
# 결과가 없으면 에러 처리
if not result:
print("검색 결과가 없습니다. 다른 키워드를 시도해 주세요.")
else:
# 각 게시글의 정보 출력
for i in result:
ad_element = i.select_one(".link_ad") # 광고 요소를 찾음
# 광고가 있으면 True, 없으면 False
if ad_element:
ad = True # 광고가 있을 때
else:
ad = False # 광고가 없을 때
# 출력 부분
title = i.select_one(".title_link").text.strip()
link = i.select_one(".title_link")["href"]
writer = i.select_one(".name").text.strip() # 작성자
dsc = i.select_one(".dsc_link").text.strip() # 요약내용
print(f"제목 : {title}")
print(f"링크 : {link}")
print(f"작성자 : {writer}")
print(f"글요약 : {dsc}")
print(f"광고 여부 : {ad}")
print("-----------------------------------------------------------------------------------------------------------------------------------------------------------------")
# AI 분석 기능 예시 (이 부분은 실제 API 요청을 통해 분석 요청할 수 있음)
print("\n트렌드 분석을 요청하시겠습니까? (y/n)")
choice = input()
if choice.lower() == 'y':
print("AI 분석을 시작합니다...")
# AI API 요청을 여기서 할 수 있음 (예: OpenAI API를 이용하여 분석 요청)
# 예시로는 GPT API와 연동하여 텍스트 분석을 요청할 수 있습니다.
# 예시 요청 (OpenAI API 사용):
# result = openai.Completion.create(
# engine="text-davinci-003",
# prompt=f"다음 블로그 글들을 기반으로 트렌드 분석을 해줘: {dsc}",
# max_tokens=150
# )
# print(result.choices[0].text.strip())
else:
print("트렌드 분석을 건너뜁니다.")
✅ 프로젝트 결과
이 코드는 네이버 블로그 검색 결과를 크롤링하여 각 게시글의 제목, 링크, 작성자, 요약 내용과 함께 광고 여부를 출력합니다. 또한, AI 분석 기능을 통해 선택적으로 트렌드 분석을 요청할 수 있도록 하여 데이터 분석의 기회를 제공합니다.
✅ 주요 기능:
- 웹 스크래핑: 네이버 블로그 검색 결과에서 원하는 데이터를 추출.
- 광고 필터링: 광고 글을 구분하여 결과에서 제외하거나 광고 여부를 출력.
- AI 분석: 크롤링한 데이터를 기반으로 AI 분석을 요청할 수 있는 기능 추가.
✅ 결론
이 프로젝트를 통해 웹 크롤링과 AI 분석을 결합한 프로그램을 구현했습니다. BeautifulSoup을 사용하여 네이버 블로그의 데이터를 자동으로 추출하고, AI 분석을 요청하는 기능까지 추가하여, 웹 데이터를 활용한 자동화 및 분석의 기초를 다졌습니다. 앞으로 다양한 웹사이트에서 크롤링과 분석을 확장할 수 있는 가능성을 배운 좋은 실습이었습니다.
🚦 크롤링 관련 참고 자료
- 크롤링 기초와 실습 (Notion):
이 자료는 웹 크롤링의 개념부터 실제 구현까지 다루는 실습 중심의 자료입니다. 네이버 블로그 크롤링과 같은 예시를 통해 크롤링의 기초적인 이해를 돕습니다. 데이터 추출과 관련된 다양한 기술을 배울 수 있습니다. - 크롤링 실습 및 자료 보기
https://tartan-steel-3da.notion.site/Crawling-d7f1b0e5911248248e9d81818820171e
💻 장고 관련 참고 자료
- 장고 웹 프레임워크 입문 (WikiDocs):
장고는 파이썬 기반의 강력한 웹 프레임워크로, 이 자료에서는 장고의 설치부터 웹 애플리케이션 구현까지의 과정을 상세하게 다룹니다. 웹 크롤링을 통해 얻은 데이터를 장고 애플리케이션에 통합하여, 웹 서비스를 구축하는 방법도 배울 수 있습니다. - 장고 입문 자료 보기