기술 조사 - 크롤링

  • 크롤링 프로젝트나 기술에 대한 선행 정보가 거의 없다시피 하다.
  • 고로 이 부분에선 GPT의 힘을 많이 빌릴 것이다.

자바 파이썬 중에서 언어 숙련도가 같다면

어떤 언어와 어떤 라이브러리를 크롤링에 사용하는게 좋을까? 라는 질문으로 시작해보자.

Java + Jsoup

  • 장점
    • Jsoup은 HTML 파싱에 최적화되어 있어 정적 웹페이지 크롤링에 매우 빠르고 안정적.
    • 자바는 정적 타입 언어라, 대규모 시스템에 적합
    • 멀티스레드 환경에서 많은 요청을 동시에 보낼 때 효율적
  • 단점
    • 자연어 처리, 데이터 시각화 쪽 생태계가 약함
    • 자바로 NLP나 기계학습을 하려면 구현비용이 크다.
    • SPA에서도 크롤링을 하려면, Selenium과 같은 라이브러리 사용이 필수적이지만, 자바에서는 Selenium의 연동이 조금 어렵다.

Python + BeautifulSoup / Selenium / Scrapy

  • 장점
    • Selenium의 처리가 조금 더 간단한 듯 하다.
    • 뉴스 → 텍스트 처리(NLP) → 주식 매핑 → 시각화까지 전체 작업 흐름을 파이썬 하나로 끝낼 수 있음
    • 크롤링 결과를 바로 데이터프레임, 시각화 등으로 연결하기 쉬움
    • 한국어 NLP (예: KoNLPyOktKhaiii) 도구가 많고 문서도 풍부함
  • 단점
    • 멀티스레딩 효율은 자바보다 떨어짐
      • asyncioaiohttp 쓰면 개선은 가능하다.
    • 대규모 크롤링에서는 속도 느릴 수 있음
      • Scrapy로 보완 가능

🔧 라이브러리 추천 조합

🐍 Python

  • 크롤링: requestsBeautifulSoupSeleniumScrapy
  • 자연어 처리: KoNLPytransformers (BERT), OktSoyNLP
  • 주식 매핑: pandas, 직접 구축한 맵 (예: 키워드 → 종목 코드)
  • 시각화: matplotlibseabornplotlystreamlit (웹 기반 대시보드)

☕ Java

  • 크롤링: JsoupHtmlUnitSelenium (자바용)
  • NLP: OpenNLPStanford NLP (하지만 설정 어려움)
  • 시각화: 외부 툴 또는 프론트 연동 필요 (직접 그리기 어려움)

개인적인 생각.

1. 언어

지금 프로젝트 개발에 있어서는 JAVA만을 사용한 개발 또한 불가능할 것 같지는 않다.

하지만 MSA등의 기술 활용을 통해 요즘은 개발 언어 선택으로부터 조금 더 자유롭지 않나 라고 생각한다.

추후 확장성을 생각하면 크롤링 부분은 파이썬으로 개발하는 것이 맞지 않을까 생각이 든다.

(자바를 사용하더라도 러닝커브를 마주할 일이 없다는 점에서의 나름의 장점은 있지 않을까 생각이 든다.)

2. 자연어 처리 로직 설정 부분

크롤링 할 때 자연어 처리를 해야한다면, 한글로 데이터를 수집할 것이기에 Python사용이 불가피할 것이다.

크롤링은 단순 데이터 수집으로 남겨두고 자연어 처리를 ElasticSearch에 맡긴다면, 크롤러의 언어 선택은 나름 자유로울 것 같다.

하지만… 지금 개발하는 기능과 기술들이 어떤 잠재적 제약사항을 갖고있을지 잘 모르겠다.

ps.

위의 주식 매핑, 시각화 부분은 ElasticSearch를 통해 데이터가 정제된 다음의 일일것이다.

당장 필요없지만 필요해질까봐 그냥 두었다.


📚라이브러리 상세 개요

원래 알던 내용이 아니라면 다 읽지말고 아래 표만 보는 게 정신건강에 이로울 듯 하다.

🐍 Python

1. 🥣 BeautifulSoup

✅ 특징

  • 정적인 HTML 파싱에 최적화된 라이브러리
  • requests와 함께 쓰는 게 일반적
  • 매우 가볍고 직관적

👍 장점

  • 설치 간단, 문법 쉬움 (입문자용 크롤링 도구로 최고)
  • HTML 문서를 쉽게 탐색하고 정보 추출 가능
  • 속도가 빠름 (동적 요소만 없을 경우)

👎 단점

  • 자바스크립트로 렌더링되는 동적 웹사이트는 처리 불가
  • 복잡한 페이지 구조를 처리하기에는 제한적

💡 사용 예

  • 네이버, 다음처럼 정적 HTML 기반 뉴스 제목, 본문 수집

2. 🧭 Selenium

✅ 특징

  • 브라우저를 실제로 띄워서 사람처럼 동작하는 크롤링 도구
  • 동적 렌더링되는 자바스크립트 사이트 크롤링 가능

👍 장점

  • 로그인, 버튼 클릭, 무한스크롤 등 동적 웹사이트 완벽 대응
  • 실제 브라우저 자동화 가능 (스크린샷, 파일 다운로드 등)
  • 테스트 자동화에도 활용 가능

👎 단점

  • 브라우저 실행이라 속도 느림, 리소스 많이 사용
  • 대량 크롤링에는 비효율적 (단일 스레드 + 무거움)
  • 설정이 번거로울 수 있음

💡 사용 예

  • 네이버 뉴스 무한스크롤, 구글 뉴스에서 스크롤 내리며 수집
  • 로그인 기반 웹서비스 접근 (예: 증권사 뉴스)

3. 🕸️ Scrapy

✅ 특징

  • 고성능 웹 크롤링 프레임워크
  • BeautifulSoup보다 빠르고, 구조적이고, 확장성이 높음
  • 비동기 방식으로 대규모 크롤링에 최적화됨

👍 장점

  • 매우 빠름 (비동기 처리 + 내부 최적화)
  • URL 추적 및 크롤링 구조 정의 가능 (재귀 크롤링 등)
  • 파이프라인을 통한 저장, 정제 등 자동화 구조 강력함

👎 단점

  • 학습 난이도 존재 (프레임워크 구조를 이해해야 함)
  • 단순한 작업엔 오히려 오버스펙

💡 사용 예

  • 뉴스 사이트 수천 개 페이지 순회하며 수집
  • 기업 데이터 크롤링 자동화 시스템

크롤링 라이브러리

항목BeautifulSoupSeleniumScrapy
동적 렌더링 처리❌ 불가능✅ 가능❌ 기본은 정적 (Selenium 연동 가능)
속도🔼 빠름🔽 느림🔝 매우 빠름 (비동기)
설정 난이도🔰 쉬움⚠️ 보통🧠 중간 이상
대량 크롤링❌ 제한적❌ 부적합✅ 최적화됨
자동화 작업 (클릭 등)❌ 불가✅ 가능❌ 기본은 불가
학습 난이도⭐ 매우 쉬움⭐⭐ 보통⭐⭐⭐ 중간 이상
확장성 / 유지보수❌ 낮음⚠️ 보통✅ 높음
상황추천 도구
간단한 뉴스 페이지에서 텍스트만 수집BeautifulSoup + requests
스크롤, 버튼 등 동적 요소 있는 사이트Selenium
수많은 페이지를 자동으로 순회하며 수집Scrapy
실시간 자동화 or 브라우저 제어 필요한 경우Selenium

NLP 라이브러리

도구종류특징장점단점
KoNLPy라이브러리다양한 한국어 형태소 분석기 모음다양한 분석기 지원 (Okt, Kkma 등), 쉬운 사용속도 느림, 최신 모델 부족
transformers (BERT)딥러닝 모델사전학습된 한국어 BERT 사용 가능문맥 이해 강력, 정밀한 의미 분석무겁고 느림, GPU 권장
Okt (KoNLPy 포함)형태소 분석기트위터 형태소 분석기 기반, 쉬운 사용명사 추출 간편, 속도 무난정확도 낮을 때 있음
SoyNLP경량 분석기비지도 학습 기반, 학습 없이 명사 추출속도 빠름, 사전 학습 없이 명사 추출 가능문맥 분석 어려움, 띄어쓰기 한계

📝 간단 요약:

  • 빠르게 명사만 뽑기 → OktSoyNLP
  • 정확하게 문맥 파악 → transformers (BERT)
  • 여러 분석기 테스트해보고 싶다 → KoNLPy

☕ Java

1. 🥣 Jsoup

  • requests + BeautifulSoup 역할을 한 번에 하는 느낌
  • CSS 셀렉터 기반 파싱 (doc.select("div.title"))
  • 속도 매우 빠르고, 자바에서 HTML 다루는 데 가장 자주 사용됨

2. 🧪 HtmlUnit

  • 브라우저를 띄우지 않고도 JS 실행을 흉내냄
  • WebClient라는 객체를 통해 페이지 로딩
  • 하지만 최신 웹사이트(SPA, React 등)는 렌더링 실패할 수도 있음

3. 🧭 Selenium (Java)

  • 실제 ChromeFirefox 브라우저를 자동 제어
  • 클릭, 입력, 스크롤 등 사용자 행동 자동화 가능
  • UI 테스트도 가능 (테스트 자동화와 크롤링 겸용 가능)

크롤링 라이브러리

도구특징장점단점적합한 용도
JsoupHTML 파싱 전용
(정적 페이지 전용)
빠르고 가볍다
문법 간단
자바스크립트 렌더링 불가정적 웹사이트의 크롤링
HtmlUnit가벼운 헤드리스 브라우저
(동적 렌더링 일부 지원)
가볍고 빠름
JS 일부 실행 가능
최신 JS 사이트엔 불완전
디버깅 어려움
간단한 동적 페이지 크롤링
Selenium (Java)실제 브라우저 자동화 도구
동적 페이지 완벽 지원
JS 렌더링 100% 지원
사람처럼 행동 가능
무겁고 느림
설정 복잡
자바스크립트 기반 웹 크롤링
로그인, 버튼 클릭 등 자동화
상황추천 도구
정적 HTML만 수집✅ Jsoup
JS 약간 있는 간단한 동적 페이지✅ HtmlUnit (성능 우선시)
무한스크롤, 로그인, 클릭 등 복잡한 상호작용✅ Selenium (Java)

NLP 라이브러리

항목OpenNLPStanford NLP
🔧 개발사ApacheStanford University
🧠 주요 기능토큰화, 품사 태깅, 문장 분리, 개체명 인식 등토큰화, 품사 태깅, 구문 분석, 개체명 인식, 감정 분석 등
⚙️ 설정 난이도비교적 쉬움 (jar만 연결하면 바로 사용 가능)설정 복잡 (모듈 나뉘고 모델도 별도 다운로드 필요)
🚀 성능빠르고 가볍다정밀하고 정확도 높음
🌍 다국어 지원영어 중심, 한국어 거의 없음영어 중심, 한국어 약간 실험적 지원
🧱 커스터마이징쉬운 편 (모델 재학습 가능)가능하지만 복잡하고 무거움
목적추천 도구
자바 기반 간단한 NLP 기능만 필요 (영어)✅ OpenNLP
영어 기준으로 정밀한 NLP 분석이 필요✅ Stanford NLP
한국어 중심 NLP가 목적❌ 둘 다 적합하지 않음 → 🐍 파이썬 BERT나 KoNLPy 추천