본문 바로가기

프로젝트/논문크롤러 프로젝트

논문크롤러 프로젝트(2) - 개발 환경 설정 (Ubuntu 18.04 LTS + Python + Selenium + BeautifulSoup + Flask + Virtualenv 설치)

앞선 포스팅에서 설명하였듯이, 이번 프로젝트를 파이썬을 이용하여 개발하기로 결정, 크게 2가지 부분으로 나누었다.

 

  • 키워드 등록 요청을 받고, 저장되어있는 논문을 요청하면 전달해주는 Flask기반의 웹서버
  • 하나의 키워드를 기반으로 크롤링을 실제로 진행하는 크롤러

전체적인 프로젝트 개요

전체적인 프로젝트의 개요는 위의 사진과 같다. 

 

크게 웹서버와 크롤러로 나눌수 있는데, 웹 서버는 주기적으로 ( 1일에 1번 혹은 키워드가 등록되었을 때 ) 크롤러에게 크롤링 명령을 내린다. 그러면, 크롤러는 명령을 받고 ( 명령에는 키워드/User 등이 포함되어 있음 ) IEEE Xplore에서 논문을 크롤링하여 User별로, keyword별로 디렉토리를 나누어 저장한다.

 

개발환경은 다음과 같다. 

 

OS : Ubuntu 18.04 LTS

개발 사용 언어 : Python

크롤링에 필요한 라이브러리 : Selenium + BeautifulSoup

웹서버 사용 프레임워크 : Flask + MariaDB

 

여기서 Ubuntu와 파이썬은 설치가 되어있다고 가정한다. 

 

파이썬의 경우, 일반적으로 라이브러리 의존성 문제를 해결하기 위하여 가상환경을 사용한다.

이는 여러개의 프로젝트를 진행시, 라이브러리간의 충돌을 방지하기 위함이다.

그래서 독립적인 격리된 가상환경을 이용하게 된다. 

 

가상환경의 대표적인 모듈은 venv, conda, pyenv, virtualenv 등이 존재하는데, 여기서는 virtualenv를 이용해보겠다.

 

먼저 pip를 통하여 virtualenv를 설치한다. 

$pip install virtualenv

그 후, virtualenv로 가상환경을 원하는 디렉토리로 이동하여 생성한다.

$virtualenv 가상환경명

가상환경의 구동은 아래와 같이 실시할 수 있다.

$source 가상환경명/bin/activate

이렇게 가상환경으로 변경된 상태에서 pip 명령어로 패키지를 설치하면, 별도의 격리된 공간에 라이브러리가 설치되어 라이브러리간의 버전차이로 인한 충돌을 방지할 수 있다.

 

가상환경을 빠져나올 때는 아래와 같이 입력하면된다.

$deactivate

가상환경을 구성하였다면, 이제 우리의 프로젝트에 필요한 라이브러리들을 설치해보자

 

웹서버에 필요한 프레임워크인 Flask는 다음과 같이 설치할 수 있다.

$(가상환경명) pip install Flask

가상환경명이 앞에 붙어있는지 항상 확인하도록 한다.

 

웹으로 부터 받아온 HTML데이터를 파싱하기 위하여 BeautifulSoup4를 설치해야한다.

$(가상환경명) pip install beautifulsoup4

동적 웹페이지를 받아오기 위하여, Web의 테스트에 주로 사용되는 Selenium을 설치한다

$(가상환경명) pip install selenium

그 후, 가상 웹드라이버를 선택해주어야하는데 기본적으로 Firefox가 설치되어있다. 하지만, 내 서버는 GUI환경이 존재하지 않기때문에 ( Ubuntu 18.04 LTS Server ), Headless 설정이 되어있는 가상 웹드라이버를 선택해야한다. 

Chrome Driver를 설치하고나서, Headless 설정을 해주는 것도 하나의 방법이지만, 많이 사용하는 PhantomJS 가상 드라이버를 설치해보도록 하겠다.

 

//PhantomJS에 필요한 라이브러리 설치
$apt-get install -y wget libfontconfig
//바이너리를 내려받고 설치하기
$mkdir -p /home/root/src && cd $_
$wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
$tar jxvf phantomjs -2.1.1-linux-x86_64.tar.bz2
$cd phantomjs-2.1.1-linux-x86_64/bin/
$cp phantomjs /usr/local/bin/ 

이렇게, 이번 프로젝트에 필요한 대부분의 라이브러리를 설치했다. 추후 프로젝트를 진행하다가, 추가적으로 설치해야할 라이브러리가 존재한다면 그때 추가적으로 설치하도록 하겠다. 

 

Selenium + PhantomJS의 사용에 관한 간단한 설명은 아래의 링크를 참조하였다.

https://hoony-gunputer.tistory.com/48

 

ubuntu에서 selenium과 Phantomjs를 사용해서 스크래핑해오기

ubuntu에서 selenium과 Phantomjs를 사용해서 스크래핑해오기 phantomjs와 selenium설치하기 //selenium설치 pip3 install selenium //Beautifulsoup4 설치 pip3 install Beautifulsoup4 //PhantomJS에 필요한 라..

hoony-gunputer.tistory.com

다음 포스팅부터는 실제로 개발을 실시할 것이다. 

 

우선적으로, 크롤러를 먼저 개발후 웹서버를 붙이는 형식으로 개발을 진행할 것이다. 

웹서버에서 keyword + User를 크롤러에게 넘겨주면, 그 Keyword를 바탕으로 IEEE Xplore에서 검색하고 User_Keyword 디렉토리에 저장할 것이므로, 웹서버와의 연계가 가능하도록 크롤러를 잘 구현하여야 할 것이다.