파이썬을 이용한 네이버 크롤링 하기

파이썬을 이용한 네이버 크롤링은 인터넷 상의 정보를 수집하는 기술로, 다양한 목적으로 활용됩니다. 파이썬은 웹 크롤링을 쉽고 간편하게 구현할 수 있는 강력한 언어입니다. 이 글에서는 파이썬을 이용하여 네이버 크롤링을 하는 방법에 대해 알아보겠습니다.

파이썬을 이용한 네이버 크롤링

제공된 파이썬 코드는 Tkinter와 Selenium을 사용하여 Naver에서 사용자가 입력한 주제와 관련된 검색 결과를 스크래핑하는 GUI 응용 프로그램입니다. 이 코드는 검색 결과의 제목, 설명 및 URL을 스크래핑하고 이를 엑셀 파일에 저장하는 기능을 수행합니다. 파이썬을 이용한 네이버 크롤링 코드를 단계별로 설명하겠습니다

 

1. 라이브러리 설치하기

파이썬을 이용한 네이버 크롤링을 위해 먼저 필요한 라이브러리를 설치해야 합니다.
필요한 라이브러리 가져오기: 코드는 `time`, `selenium`, `pandas`, `tkinter`, `messagebox`, `ttk`, `tqdm` 등 필요한 라이브러리가 필요 합니다.
아래 소스를 보면서 자세히 설명 드리겠습니다.

2. 웹 페이지 접근하기

`requests` 라이브러리를 사용하여 웹 페이지에 접근합니다. 네이버의 경우 URL에 원하는 검색어를 포함시켜 검색 결과 페이지에 접근할 수 있습니다.

3. 웹 페이지 파싱하기

`BeautifulSoup` 라이브러리를 사용하여 웹 페이지의 HTML 코드를 파싱합니다. 이를 통해 원하는 데이터를 추출할 수 있습니다. 네이버의 경우 검색 결과는 HTML 태그를 이용하여 표현되므로, 이를 활용하여 데이터를 추출합니다.

4. 데이터 추출하기

파싱된 HTML 코드에서 원하는 데이터를 추출합니다. 예를 들어, 네이버 검색 결과에서 제목, 링크, 요약 등의 정보를 추출할 수 있습니다.

5. 반복 작업하기

여러 페이지에 걸쳐 데이터를 수집해야 할 경우, 반복 작업을 통해 모든 페이지의 데이터를 수집할 수 있습니다. 이를 위해 페이지를 넘기는 기능을 구현합니다.

6. 데이터 저장하기

크롤링한 데이터를 저장하여 필요한 경우에 다시 사용할 수 있도록 합니다. CSV 파일이나 데이터베이스에 저장하는 방법을 사용할 수 있습니다.

파이썬을 이용한 네이버 크롤링 결과

7. 로봇 배제 규칙 확인하기

웹 사이트에서 로봇 배제 규칙을 설정하여 웹 크롤러의 접근을 제어하는 경우가 있습니다. 크롤링을 진행하기 전에 로봇 배제 규칙을 확인하고, 웹 사이트의 규칙을 따르는 것이 중요합니다.

8. 크롤링 대상 변경하기

크롤링 대상이 되는 웹 사이트의 구조나 규칙이 변경될 수 있습니다. 따라서 크롤러를 유연하게 설계하여 변경에 대응할 수 있도록 합니다.

9. 크롤링 윤리

크롤링을 진행할 때는 웹 사이트의 이용 약관과 정책을 준수해야 합니다. 또한 크롤링으로 인해 웹 사이트의 서버에 과부하가 발생하지 않도록 주의해야 합니다.

단계별 코드 설명

제공된 파이썬 코드는 Tkinter와 Selenium을 사용하여 Naver에서 사용자가 입력한 주제와 관련된 검색 결과를 스크래핑하는 GUI 응용 프로그램입니다. 이 코드는 검색 결과의 제목, 설명 및 URL을 스크래핑하고 이를 엑셀 파일에 저장하는 기능을 수행합니다. 코드를 단계별로 설명하겠습니다

 

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import pandas as pd
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
import tkinter as tk
from tkinter import messagebox, ttk
from tqdm import tqdm

def scrape_and_save():
    subject = subject_entry.get()
    if not subject:
        messagebox.showerror("에러", "주제를 입력해주세요.")
        return

    driver = webdriver.Chrome()
    url = 'https://search.naver.com/search.naver?where=view&sm=tab_jum&query=' + subject
    driver.get(url)
    time.sleep(3)

    body = driver.find_element(By.TAG_NAME, 'body')

    for i in tqdm(range(5), desc="검색 결과 스크래핑 진행 중"):
        body.send_keys(Keys.PAGE_DOWN)
        time.sleep(1)

    posts = driver.find_elements(By.CSS_SELECTOR, 'ul.lst_total._list_base > li')

    titles = []
    descriptions = []
    urls = []
    

    for post in posts:
        try:
            title = post.find_element(By.CSS_SELECTOR, 'a.api_txt_lines.total_tit._cross_trigger').text
            description = post.find_element(By.CSS_SELECTOR, 'div.api_txt_lines.dsc_txt').text
            url = post.find_element(By.CSS_SELECTOR, 'a.api_txt_lines.total_tit._cross_trigger').get_attribute('href')
          
 
            titles.append(title)
            descriptions.append(description)
            urls.append(url)
           
        except NoSuchElementException:
            continue

    df = pd.DataFrame({'Title': titles, 'Description': descriptions, 'URL': urls})
    output_file = 'output.xlsx'
    df.to_excel(output_file, index=False)

    driver.quit()
    messagebox.showinfo("완료", f"데이터 스크래핑이 완료되었습니다.\n{output_file} 파일을 확인하세요.")

    # 화면에 Excel 파일 내용 표시
    show_excel_data(df)

def show_excel_data(df):
    excel_window = tk.Toplevel()
    excel_window.title("Excel 파일 내용")
    excel_window.geometry("800x400")

    tree_view = ttk.Treeview(excel_window)
    tree_view["columns"] = tuple(df.columns)
    tree_view.heading("#0", text="Index", anchor="center")
    tree_view.column("#0", anchor="center", width=50, stretch=False)

    for column in df.columns:
        tree_view.heading(column, text=column, anchor="center")
        tree_view.column(column, anchor="center", width=150, stretch=False)

    for index, row in df.iterrows():
        tree_view.insert("", "end", text=index, values=tuple(row))

    tree_view.pack(fill="both", expand=True)

# GUI 생성
window = tk.Tk()
window.title("네이버 검색 결과 스크래핑")
window.geometry("400x200")

subject_label = tk.Label(window, text="주제를 입력하세요:")
subject_label.pack(pady=10)

subject_entry = tk.Entry(window, width=30)
subject_entry.pack(pady=5)

scrape_button = tk.Button(window, text="검색 결과 스크래핑", command=scrape_and_save)
scrape_button.pack(pady=10)

window.mainloop()

1. 필요한 라이브러리 가져오기: 코드는 `time`, `selenium`, `pandas`, `tkinter`, `messagebox`, `ttk`, `tqdm` 등 필요한 라이브러리를 가져옵니다.

물론! 요청하신 라이브러리에 대해 간단히 설명드리겠습니다.

time : time은 파이썬 내장 라이브러리로, 시간과 관련된 기능들을 제공합니다. 예를 들어, 프로그램 실행 속도를 측정하는데 사용하거나 특정 코드 실행을 지연시키는데 활용될 수 있습니다.

selenium : selenium은 웹 브라우저 자동화를 위한 도구입니다. 주로 웹 페이지 테스트 자동화나 웹 크롤링 등에 사용됩니다.

pandas : pandas는 데이터 조작과 분석을 위한 강력한 라이브러리로, 표 형태로 데이터를 다루는데 유용합니다. DataFrame이라는 자료구조를 통해 데이터를 쉽게 다룰 수 있습니다.

tkinter : tkinter는 파이썬의 표준 GUI (그래픽 사용자 인터페이스) 라이브러리입니다. 사용자 인터페이스를 개발하고 구성하는데 사용됩니다.

messagebox : messagebox는 `tkinter`와 관련하여 간단한 팝업 메시지를 표시하는데 사용됩니다. 사용자에게 알림이나 간단한 메시지를 보여줄 때 활용됩니다.

ttk : ttk는 `tkinter`의 테마화된 위젯을 제공하는 모듈입니다. 보다 현대적인 디자인과 스타일을 적용하여 GUI를 개발할 수 있습니다.

tqdm : tqdm은 루프의 진행 상태를 표시해주는 라이브러리입니다. 반복문의 진행률을 시각적으로 보여주며, 작업이 얼마나 진행되었는지를 확인할 수 있습니다.

위 라이브러리들은 각각 다양한 용도로 활용되며, 프로젝트에 따라 필요한 기능들을 활용하여 개발하시면 됩니다.

2. scrape_and_save() 함수: 이 함수는 웹 스크래핑을 수행하고 결과를 엑셀 파일에 저장하는 역할을 합니다.

3. GUI 요소: 코드는 Tkinter를 사용하여 그래픽 사용자 인터페이스 (GUI)를 만듭니다. 레이블, 입력 상자 및 버튼이 포함됩니다.

4. scrape_and_save() 함수 설명:

   – 사용자가 GUI에서 “검색 결과 스크래핑” 버튼을 클릭하면 이 함수가 호출됩니다.

   – 함수는 사용자가 입력한 주제를 입력 상자에서 가져옵니다.

   – 주제가 입력되었는지 확인하고, 입력되지 않았다면 `messagebox`를 사용하여 오류 메시지를 표시합니다.

   – Chrome용 Selenium WebDriver를 초기화하고, 입력한 주제에 기반하여 Naver의 검색 결과 페이지로 이동합니다.

   – 코드는 `Keys.PAGE_DOWN` 동작을 사용하여 페이지를 여러 번 스크롤하여 더 많은 검색 결과를 로드합니다(5회 반복).

   – 그런 다음 CSS 선택자를 사용하여 검색 결과의 제목, 설명 및 URL을 추출합니다.

   – 추출한 데이터는 `titles`, `descriptions`, `urls`라는 세 개의 별도 리스트에 저장됩니다.

   – 이 리스트들을 사용하여 pandas DataFrame을 생성하고, DataFrame은 `output.xlsx`라는 이름의 엑셀 파일로 저장됩니다.

   – Selenium WebDriver를 종료하고, 메시지 박스가 완료 메시지와 출력 파일의 이름을 표시합니다.

   – 함수는 또한 `show_excel_data()`를 호출하여 엑셀 파일의 내용을 새 창에 표시합니다.

5. show_excel_data(df) 함수 설명:

   – 이 함수는 새로운 Tkinter Toplevel 창에서 엑셀 파일의 내용을 표시하는 역할을 합니다.

   – 새 창 내에서 데이터를 표 형식으로 표시하는 Treeview 위젯을 만듭니다.

   – Treeview 열은 DataFrame의 열을 기준으로 설정됩니다.

   – DataFrame의 각 행에 대해 함수는 데이터를 Treeview에 삽입합니다.

6. GUI 생성: 코드는 주요 Tkinter 창을 생성하고 입력 요소(레이블, 입력 상자) 및 “검색 결과 스크래핑” 버튼을 설정합니다.

   – 사용자가 버튼을 클릭하면 `scrape_and_save()` 함수가 실행됩니다.

전반적으로 코드는 사용자가 검색 주제를 입력하고 버튼을 클릭하면 Naver에서 주제와 관련된 검색 결과를 스크래핑하여 결과를 엑셀 파일로 저장하고, Tkinter를 사용하여 엑셀 파일의 내용을 별도 창에 표시할 수 있는 기능을 제공합니다.

10. 결론

파이썬을 이용한 네이버 크롤링은 매우 유용하고 강력한 기술입니다. 적절한 라이브러리를 활용하여 데이터를 추출하고 저장하는 방법을 익히면 다양한 분야에서 활용할 수 있습니다. 단, 크롤링을 진행할 때는 윤리를 지켜서 웹 사이트의 권리를 존중하는 것이 중요합니다.

 

파이썬을 이용한 네이버 크롤링 하기 FAQs

 

Q. 크롤링한 데이터를 어떻게 저장해야 하나요?

크롤링한 데이터를 저장할 때는 CSV 파일이나 데이터베이스를 활용할 수 있습니다. 저장 방식은 데이터의 용도와 활용 방법에 따라 결정하면 됩니다.

Q. 웹 사이트의 로봇 배제 규칙을 확인하는 방법은 무엇인가요?

로봇 배제 규칙은 웹 사이트의 `robots.txt` 파일을 통해 확인할 수 있습니다. 해당 파일을 확인하여 크롤러의 접근 규칙을 파악하세요.

Q. 크롤링 대상 웹 사이트의 구조가 변경될 때 대응 방법은 무엇인가요?

크롤링 대상 웹 사이트의 구조나 규칙이 변경될 수 있습니다. 크롤러를 유연하게 설계하여 변경에 대응할 수 있도록 합니다.

Q. 크롤링을 진행할 때 주의해야 할 사항은 무엇인가요?

크롤링을 진행할 때는 웹 사이트의 이용 약관과 정책을 준수해야 합니다. 또한 웹 사이트의 서버에 과부하가 발생하지 않도록 주의해야 합니다.

 

도움이 될만한 다른 글

워드프레스 REST API 활용 자동포스팅

정부24-민원서비스-전세사기-예방을-위한-건축물-대장-총정리

 

 

 

 

Leave a Comment