프로젝트

Chapter 1 네이버 정적 스크랩핑,크롤러 프로젝트

Chansman 2025. 4. 14. 15:22

📌 네이버 블로그 크롤링 및 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):
    장고는 파이썬 기반의 강력한 웹 프레임워크로, 이 자료에서는 장고의 설치부터 웹 애플리케이션 구현까지의 과정을 상세하게 다룹니다. 웹 크롤링을 통해 얻은 데이터를 장고 애플리케이션에 통합하여, 웹 서비스를 구축하는 방법도 배울 수 있습니다.
  • 장고 입문 자료 보기

https://wikidocs.net/78329