웹 크롤링과 텍스트 마이닝의 기초: 나무위키 데이터 수집하기



웹 크롤링과 텍스트 마이닝의 기초: 나무위키 데이터 수집하기

웹 크롤링과 텍스트 마이닝은 데이터 과학의 중요한 기초입니다. 이번 글에서는 나무위키의 최근 변경 페이지에서 텍스트 데이터를 수집하고, 이를 통해 키워드의 출현 빈도를 분석하는 방법을 소개합니다. 웹 크롤링을 통해 데이터를 수집하면, 다양한 데이터 분석 및 머신러닝 모델에 활용할 수 있는 기초 자료를 확보할 수 있습니다.

 

👉 ✅ 상세 정보 바로 확인 👈

 

웹 크롤링 라이브러리 사용하기

웹 크롤링을 위해 파이썬의 BeautifulSouprequests 라이브러리를 사용할 수 있습니다. requests는 웹 페이지의 문서를 가져오는 데 사용되며, BeautifulSoup는 가져온 문서에서 원하는 데이터를 추출하는 데 도움을 줍니다. 이 두 라이브러리를 통해 사용자는 손쉽게 웹에서 데이터를 수집할 수 있습니다. {asof_date} 기준으로, 이 두 라이브러리는 데이터 수집에 매우 유용하며, 설치와 사용이 간편한 장점이 있습니다.



다음은 웹 페이지의 URL을 통해 구조를 분석하고 데이터를 수집하는 간단한 코드 예시입니다. 사용자는 이 코드를 통해 나무위키의 최근 변경사항을 확인할 수 있습니다.

“`python
import requests
from bs4 import BeautifulSoup

source_url = “https://namu.wiki/RecentChanges”
req = requests.get(source_url)
= req.content
soup = BeautifulSoup(, ‘lxml’)
contents_table = soup.find(name=”table”)
table_body = contents_table.find(name=”tbody”)
table_rows = table_body.find_all(name=”tr”)
“`

위 코드에서는 나무위키의 “최근 변경” 페이지에서 구조를 기반으로 데이터를 추출하는 과정을 보여줍니다. requests.get() 메서드를 사용하여 페이지의 문서를 가져오고, BeautifulSoup을 통해 원하는 데이터를 찾습니다.

 

👉 ✅ 상세 정보 바로 확인 👈

 

페이지 URL 정보 추출하기

나무위키에서 수집할 페이지의 URL을 추출하기 위해 다음과 같은 코드를 사용할 수 있습니다. 이 과정에서는 table 안에 있는 tr 태그를 순회하면서 각 페이지의 링크를 수집합니다.

“`python
page_url_base = “https://namu.wiki”
page_urls = []
for index in range(0, len(table_rows)):
first_td = table_rows[index].find_all(‘td’)[0]
td_url = first_td.find_all(‘a’)
if len(td_url) > 0:
page_url = page_url_base + td_url[0].get(‘href’)
if ‘png’ not in page_url:
page_urls.append(page_url)

page_urls = list(set(page_urls))
“`

위 코드에서는 각 tr 태그의 첫 번째 td에서 링크 정보를 추출합니다. 이때 중복된 URL을 제거하여 최종적으로 크롤링할 페이지의 URL 리스트를 확보합니다. {asof_date} 기준으로, 이 방법은 데이터를 체계적이고 효율적으로 수집하는 데 도움을 줍니다.

텍스트 정보 수집하기

이제 수집된 페이지 URL을 통해 텍스트 정보를 추출할 차례입니다. 아래의 코드는 최근 변경된 문서 중 하나에서 텍스트 정보를 크롤링하는 예를 보여줍니다.

“`python
req = requests.get(page_urls[0])
= req.content
soup = BeautifulSoup(, ‘lxml’)
contents_table = soup.find(name=”article”)
title = contents_table.find_all(‘h1’)[0]
category = contents_table.find_all(‘ul’)[0]
content_paragraphs = contents_table.find_all(name=”div”, attrs={“class”:”wiki-paragraph”})
content_corpus_list = []

for paragraphs in content_paragraphs:
content_corpus_list.append(paragraphs.text)
content_corpus = “”.join(content_corpus_list)
“`

이 코드는 특정 페이지의 제목, 카테고리, 본문 내용을 추출하여 하나의 문자열로 결합합니다. 이 과정을 통해 사용자는 나무위키에서 필요한 텍스트 정보를 쉽게 확보할 수 있습니다. 수집한 텍스트는 이후 분석 및 가공의 기초 자료로 활용될 수 있습니다.

키워드 출현 빈도 분석하기

수집한 텍스트 데이터를 기반으로 키워드의 출현 빈도를 분석할 수 있습니다. 이를 위해 Python의 collections 모듈을 활용하여 텍스트에서 단어의 빈도를 세는 방법을 소개합니다. 아래 코드는 텍스트 데이터를 전처리하고 키워드의 출현 빈도를 계산하는 예시입니다.

“`python
from collections import Counter
import re

텍스트 전처리

words = re.findall(r’\w+’, content_corpus.lower())
word_counts = Counter(words)

상위 10개 키워드 출력

top_keywords = word_counts.most_common(10)
for keyword, count in top_keywords:
print(f'{keyword}: {count}’)
“`

위의 코드에서는 정규 표현식을 사용하여 텍스트에서 단어를 추출하고, 각 단어의 출현 빈도를 계산합니다. 최종적으로 가장 많이 등장한 상위 10개의 키워드를 출력합니다. {asof_date} 기준으로, 이러한 분석을 통해 사용자는 데이터의 주요 경향을 파악하고, 이후 데이터 분석이나 모델링에 필요한 기초 자료를 확보할 수 있습니다.

데이터 수집의 중요성과 활용

웹 크롤링을 통해 수집한 데이터는 분석과 연구의 기초 자료로 활용될 수 있습니다. 나무위키와 같은 대규모 웹사이트에서의 데이터 수집은 특정 주제나 키워드에 대한 인사이트를 얻는 데 유용합니다. 또한, 수집한 데이터를 통해 사용자는 자연어 처리(NLP) 기술을 적용할 수 있으며, 머신러닝 모델을 학습시키는 데 필요한 데이터를 준비할 수 있습니다.

웹 크롤링과 텍스트 마이닝의 기초를 이해하고 활용하는 것은 데이터 과학의 첫걸음입니다. 이를 통해 실제 데이터를 수집하고 분석하는 경험을 쌓는 것이 중요합니다. 이 과정을 통해 데이터에 대한 이해를 높이고, 데이터 기반 의사결정에 필요한 기초를 다질 수 있습니다.

이러한 기초 지식을 바탕으로 더 복잡한 데이터 분석 및 활용을 위해 나아가기를 권장합니다. 데이터 수집 및 분석의 첫걸음을 잘 딛고 나아가면, 미래의 데이터 과학자나 분석가로서의 길이 더욱 확고해질 것입니다.