SOOJLE
1.0.0
1.0.0
  • SOOJLE Document
  • 프로젝트 요약
  • 프로젝트 개요
    • 프로젝트 소개
    • 추진 배경 및 필요성
    • 프로젝트 내용
      • 기능적 요구사항
      • 비기능적 요구사항
    • 개발환경 및 팀 구성
    • 워크플로우
      • 계획 수립 & 설계
      • 데이터 수집 및 정규화
      • 인공지능 개발
      • 서비스 모듈 개발
      • 성능 평가 및 보고
    • 프로젝트 예산 내역
  • 사전조사 & 의사결정
    • 사전조사
      • 재학생 대상 사전조사
      • 수집 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
  • 개요
  • 크롤링 대상 URL 접속
  • URL 파싱 및 페이지 반복

Was this helpful?

  1. 데이터 크롤러
  2. 크롤러 개발 과정

크롤러 규격화

Previous크롤러 프로그램 설계Next크롤러 정규화

Last updated 5 years ago

Was this helpful?

개요

문서를 수집하는 대상 홈페이지들은 전부 규격이 다르기에, 크롤러 코드를 어 떠한 웹페이지에서도 정보를 체계화할 수 있도록 규격화할 필요가 있다. 이에 따라서 크게 5가지 단계로 나어져 반복한다.

1. 크롤링 대상 URL에 접속을 한다. 2. 대상 URL의 페이지를 반복하면서 동시에 해당 사이트의 구조에 따른 데이터 파싱 방법을 결정한다. 3. 해당 URL의 페이지에서의 게시물들을 리스트화 시킨다. 4. 리스트화 시킨 게시물들에서 규격화된 정보를 각 게시물마다 추출한다. 5. 추출된 정규화된 정보들을 데이터베이스에 저장한다.

크롤링 대상 URL 접속

다음과 같이 모든 URL을 Crawling 함수에 인자로 넣어서 실행시켜준다.

URL 파싱 및 페이지 반복

다음과 같이 페이지를 1부터 1씩 증가시켜서 목표 URL을 생성한다. 만약 해당 페이지에서 크롤링한 게시물이 0개라면 다음 크롤러로 넘어가는 구조이다.

해당 URL의 페이지의 구조에 따른 분류를 시작한다. BeautifulSoup를 통해서 파싱하는 경우와, Selenium을 통해서 파싱하는 경우를 나누고, BeautifulSoup를 통해서 파싱하는 경우에서는, 해당 사트의 HTML문서의 인코딩 및 디코딩 방 식의 유무에 따라 개별적인 처리를 해준 뒤에, 해당 HTML 문서를 가져온다.

위 코드에서 해당 HTML 파일의 문서를 파싱하기 위해서는 다음과 같은 구조 로 동작한다.

먼저 파싱 하기 전에 header을 선언해준다. 이 header은 현재 이 사이트에 접속 할 때 사용되게 된다. HTML 사이트에 접근하기 위해서는 HTTP 통신 규약에 의해서 접속을 하게 되는데, 대상 사이트에 접근을 하기 위해서는 클라이언트의 정보를 같이 넣어서 요청을 해야 한다.

이 과정을 header에서 선언해주는 것이 다. 이 것뿐만 아니라, verify라는 파라미터를 False로 설정하여서, “https://” 뿐만 아니라 SSL 때문에 접근오류가 발생하는 “http://” 로 시작하는 사이트 인증 오류 문제를 무시 해준다. 또한 euc-kr 또는 UTF-8 의 인코딩 또는 디코딩 문제로 인한 해결 방법을 분류하였다.

이 외에도 Selenium 같은 경우에는 현재 Chrome 버전에 맞는 chromedriver을 설치하여서, 이 chromedriver을 통해서 크롤링을 진행하도록 설정하였다. 이 chromedriver도 위 requests 방식대로 header에 존재하는 정보를 넣어주었으며, chromedriver을 headless 속성을 넣어줌으로서, 동일하게 크롤링 프로그램 이 작동하도록 설정하였다.

이렇게 해당 URL에 대한 BeautifulSoup 또는 Selenium 방식으로 해당 HTML 파일을 파싱 한 후 데이터를 크롤링하는 구조가 되겠다.

BeautifulSoup 와 Selenium 및 Parsing 구조 분류
HTML Parsing 분류
Driver 연결