웹 크롤링과 텍스트 마이닝은 데이터 과학의 중요한 기초입니다. 이번 글에서는 나무위키의 최근 변경 페이지에서 텍스트 데이터를 수집하고, 이를 통해 키워드의 출현 빈도를 분석하는 방법을 소개합니다. 웹 크롤링을 통해 데이터를 수집하면, 다양한 데이터 분석 및 머신러닝 모델에 활용할 수 있는 기초 자료를 확보할 수 있습니다.
웹 크롤링 라이브러리 사용하기
웹 크롤링을 위해 파이썬의 BeautifulSoup과 requests 라이브러리를 사용할 수 있습니다. 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) 기술을 적용할 수 있으며, 머신러닝 모델을 학습시키는 데 필요한 데이터를 준비할 수 있습니다.
웹 크롤링과 텍스트 마이닝의 기초를 이해하고 활용하는 것은 데이터 과학의 첫걸음입니다. 이를 통해 실제 데이터를 수집하고 분석하는 경험을 쌓는 것이 중요합니다. 이 과정을 통해 데이터에 대한 이해를 높이고, 데이터 기반 의사결정에 필요한 기초를 다질 수 있습니다.
이러한 기초 지식을 바탕으로 더 복잡한 데이터 분석 및 활용을 위해 나아가기를 권장합니다. 데이터 수집 및 분석의 첫걸음을 잘 딛고 나아가면, 미래의 데이터 과학자나 분석가로서의 길이 더욱 확고해질 것입니다.