SOOJLE
수즐 커뮤니티
수즐 커뮤니티
  • SOOJLE Document
  • 프로젝트 요약
  • Untitled
  • 프로젝트 개요
    • 프로젝트 소개
    • 추진 배경 및 필요성
    • 프로젝트 내용
      • 기능적 요구사항
      • 비기능적 요구사항
    • 개발환경 및 팀 구성
    • 워크플로우
      • 계획 수립 & 설계
      • 데이터 수집 및 정규화
      • 인공지능 개발
      • 서비스 모듈 개발
      • 성능 평가 및 보고
    • 프로젝트 예산 내역
  • 사전조사 & 의사결정
    • 사전조사
      • 재학생 대상 사전조사
      • 수집 URL 대상 목록
        • 세종대학교 직할
        • 세종대학교 학과
        • 공식 공지사항
        • 세종대 평생교육원
        • 외부 웹사이트
      • 학습 모델 사전조사
        • LSA - 잠재 의미 분석
        • LDA - 잠재 디리클레 할당
        • Word2Vec - 워드투벡터
        • FastText - 패스트텍스트
    • 의사결정
      • 사용자 인증 방식 의사결정
      • 데이터베이스 의사결정
        • MySQL vs MongoDB 성능 분석
      • 토픽별 의사결정
      • 부가 기능 의사 결정
  • 프로젝트 설계
    • 시스템 구조 설계
    • 핵심 기능 설계
      • 데이터 크롤러 설계
      • 게시물 토픽 정의 및 분류
      • 사용자 관심분야 측정
      • 뉴스피드 설계
        • 사용자-문서 유사도(Recommendation Score)
        • FaS (관심 분야 및 유사도 측정 - 추가)
        • 토픽 뉴스피드 목록
      • 검색 알고리즘 설계
        • 검색 알고리즘 1차 설계
        • 검색 알고리즘 1차 개선안
        • 검색 알고리즘 2차 설계
    • 요구사항 목록
      • DB 요구사항
      • 기능 요구사항
      • 품질 요구사항
      • 관리 요구사항
  • DB
    • 구조 설계
    • 테이블 명세
  • 데이터 크롤러
    • 데이터 크롤러 개요
    • 크롤링 URL 선정
    • 크롤러 구현을 위한 사전조사
    • 크롤러 개발 과정
      • 크롤러 프로그램 설계
      • 크롤러 규격화
      • 크롤러 정규화
      • 데이터 정제 과정
      • 에러 핸들러 구현
      • 배포 환경 이식을 위한 Porting
    • Issue & Exception
    • 결과 보고
  • 인공지능 개발
    • 인공지능 개발 개요
    • NLP 스터디
      • Bag of Words(BoW)
      • Document Term Matrix(DTM)
      • TF-IDF(Term Frequency-Inverse Document Frequency)
      • 문서 유사도(Document Similarity)
    • 데이터 전처리 과정
    • 개발 과정
      • 토크나이저 구현
      • LDA 모델 학습 및 구현
    • LDA 학습 모델링
      • 1차 파라미터 튜닝 결과 (NUM_TOPICS)
      • 2차 파라미터 튜닝 결과 (NUM_TOPICS)
      • 3차 파라미터 튜닝 결과 (NUM_TOPICS)
      • NUM_TOPICS 파라미터 의사결정
      • 4차 파라미터 튜닝 결과 (PASESS, ITERATION)
      • 최종 학습 모델 명세
    • Word2Vec(FastText) 학습 모델링
    • Issue & Exception
    • 성능 분석 결과
  • BackEnd
    • 서버 구축 및 배포
      • SOOJLE 서버 구조
      • 상용 서버 (UWSGI + NGINX) 구축
      • HTTPS 서버 구현
    • API 문서 개요
    • API 목록
      • Analysis
      • Auth API
      • Newsfeed API
      • Post API
      • Search API
      • Admin API
    • 세종 Auth API
    • 통계 기능 설계
    • Issue & Exception
    • 성능 분석 결과
  • FRONTEND
    • 프론트엔드 설계 개요
    • 디자인 설계 의사결정
      • 디자인 컨셉 및 기능 정의
      • 컴포넌트 디자인
      • Logo Variation
    • 화면 흐름도
    • 페이지 UI 명세
      • Main Page
      • Header
      • Footer
      • Mobile Control Bar
      • Login Page
      • Timeline Page
      • Menu Page
      • Hyperlink Icons Page
      • Search Component & Mobile Search Modal
      • Search Page
      • Post Block
      • Snackbar
  • 프로그램 배포
    • 프로그램 개요
    • 시스템 아키텍쳐
    • 주요 기능 및 명세
    • 프로그램 테스트
    • 구현 결과물 배포
  • 마무리
    • References
  • SOOJLE AI
  • SEJONG AUTH
  • IML Tokenizer
  • SOOJLE Crawler
  • SOOJLE Frontend
  • SOOJLE Backend
Powered by GitBook
On this page
  • 기술 스택 선정
  • BeautifulSoup
  • Selenium
  • BeautifulSoup vs Selenium
  • Robots.txt 및 서버 부하 방지
  • References

Was this helpful?

  1. 데이터 크롤러

크롤러 구현을 위한 사전조사

Previous크롤링 URL 선정Next크롤러 개발 과정

Last updated 5 years ago

Was this helpful?

기술 스택 선정

이번 프로젝트에서는 빅데이터라는 주제와 세종대학교라는 특정한 범위 내에서의 주제의 정보가 필요하다. 그 수많은 정보를 직접 스크랩할 수 없으므로, 웹에서 표현되는 세종대학교에 맞는 특정 정보를 자동으로 크롤링해주는 프로그램을 제작할 필요성이 있다. 이를 위해서 Python의 라이브러리로 존재하는 BeautifulSoup와 Selenium을 선정하였다.

BeautifulSoup

BeautifulSoup 라이브러리는 HTML 과 XML 파일로부터 특정 데이터를 가져오기 위해서 HTML의 태그들을 구성을 트리 형태로 만들어주어서, 특정 태그에 접근하기 쉽게 만들어주는 라이브러리이다.

또한 웹은 HTTP 통신으로 데이터를 주고받기 때문에, 웹 크롤러도 이 데이터를 받기 위해서 Requests 라는 Python 라이브러리가 필요하다. 동작 구성은 아래와 같다. Requests 라이브러리로 HTML 파일의 데이터를 받은 후, BeautifulSoup 라이브러리를 통해서 HTML 파일의 데이터에 있는 태그들을 트리형태로 구성한다.

그 이후 사용자가 원하는 태그에 접근하여, 해당 태그 속에 있는 유의미한 정보를 가져와서 데이터베이스에 저장한다. BeautifulSoup의 장점은 Requests를 사용한 HTTP 통신을 이용하기 때문에 웹에서 보여주는 시각적인 정보를 Browser에 표시할 필요가 없다.

그러므로 정보 파싱 및 크롤링 속도가 빠르다. 하지만 단점으로서는 Sing Page Application 구조 및 Javascript를 이용한 비동기 처리된 데이터들은 파싱할 수 없다는 단점이 있다.

Selenium

Selenium 라이브러리는 일방적으로 Web App을 테스트할 때 주로 사용하는 프레임워크이다. 일종의 Web 동작 자동화 라이브러리로서 사용자가 Browser을 직접 조작하지 않아도 자동으로 탐색해주고 원하는 정보를 찾는다.

Selenium의 기능 중에서는 컴퓨터가 직접 Web Browser을 띄운 후 지정 명령에 따라서 동작할 수 있도록 webdriver이라는 Api를 제공한다. 따라서 Selenium을 사용하기 위해서는 사용할 Browser의 driver이 필요하다.

이 후, Python을 통한 Selenium의 Api와 Browser Driver을 연결하면, 자동화된 Web 동작이 가능하다. Selenium의 장점은 직접 Web Driver을 통해서 원하는 정보에 접근하기 때문에 실제 사용자가 웹을 이용하였을 때, 얻을 수 있는 정보에 모두 접근 가능하다는 장점이 있다.

하지만 실제 웹 브라우저와 같은 Web Driver을 사용하기 때문에, 사용자가 필요 없는 정보도 전부 보여지게 된다. 그래서 내가 필요한 정보를 얻는데까지의 속도가 느리다는 단점도 있다.

BeautifulSoup vs Selenium

Python의 BeautifulSoup와 Selenium 라이브러리의 차이는 다음 표와 같다.

BeautifulSoup

Selenium

  • 문서 Text를 가져오기 때문에, 크롤링속도가 빠름.

  • 비동기 통신을 이용한 정보에는 접근이 힘듦.

  • Web Driver 기반 크롤링이기 때문에, 정보 수집 속도가 다소 느림.

  • 비동기 통신을 이요한 정보에도 접근 가능.

실제로 사용하는 Web 사이트에서는 비동기(Async)통신과 동기(Sync)통신이 공존하고 있다. 예로 들면, HTML 파일은 그대로 존재하면서 Javascript 및 Jquery를 이용한 비동기식 통신에서는 Selenium이 반 필수적이다.

하지만 Selenium을 사용하지 않아도 충분히 가능한 사이트에서는 BeautifulSoup를 사용하는 것을 크롤링 속도를 높일 수 있으므로, 이번 프로젝트에서는 BeautifulSoup를 사용하는 것을 기본으로 설정하며, BeautifulSoup를 이용해서 수집하지 못하는 Web 사이트 경우에는 Selenium을 이용해서 정보를 수집하는 것을 지향하는 방향으로 나아간다.

Robots.txt 및 서버 부하 방지

대다수의 Web 사이트에서는 Robots.txt 라는 파일을 Web Server에 가지고 있다. 이 Robots.txt 파일에는 해당 웹 사이트에 로봇이 접근하는 것을 방지하기 위한 접근 제한에 대한 설명을 기술하고 있다.

이 파일은 본래 로봇으로 인한 요청으로 Web Serve에 부하가 가지 않도록 하는 안내도이다. 그러므로 본 프로젝트에서의 크롤링 프로그램에서는 프로젝트를 진행할 때, Robots.txt 파일을 준수하며 크롤링 프로그램으로 인한 요청으로 해당 Web Server에 부하가 가지 않도록 하기 위해서, 크롤링 속도를 고의적으로 낮추었으며, 필요한 정보 수집 이외의 목적으로 정보를 수집하지 않도록 프로그램 제작을 하도록 지향한다.

References

robots.txt 소개 및 가이드 | Google 검색 센터  |  Google DevelopersGoogle Developers
Beautiful Soup Documentation — Beautiful Soup 4.9.0 documentation
Logo
BeautifulSoup를 사용한 Scrapping Code
Selenium을 사용한 Web Scrapping Code
Logo