사례 잘 보셨나요? 실제로는 좀 더 쉬운 방법이 있는데 일부러 약간 돌아서 가 봤습니다. 일반적인 상황에서의 모습을 보여드리기 위해서입니다. 이번엔 파이썬 스크래핑을 위한 개발환경을 설정해 보겠습니다.
개발환경 설정
- 파이썬 개발을 준비하기 위해 여러 가지 방법을 사용할 수 있습니다.
- 직접 파이썬 바이너리를 설치하는 방법도 있지만 여러 버전에 대응할 수 있고 독립적인 개발 환경을 구성할 수 있는 virtualenv, anaconda 등으로 설치하는 것을 추천 드립니다.
- 파이썬의 경우 java와는 다르게 패키지 관리 도구(pip)를 통해 라이브러리와 프레임워크를 쉽게 설치할 수 있습니다. 설치하려는 패키지가 다른 패키지에 의존할 경우 그 패키지까지 한 번에 설치해 주기 때문에 아주 편합니다.
- 하지만 버전이 다른 파이썬이나 특정 버전의 패키지에 의존성이 있는 경우 관리가 복잡해질 수 있습니다.
- 이를테면 운영체제의 일부 라이브러리를 업데이트 했더니 잘 돌아가던 프로그램이 실행 안된다거나…
- 이러한 도구들은 위에서 얘기한 위험? 불편? 을 막아주고 안전하고 편한 개발을 도와줍니다.
anaconda 설치
- anaconda 는 윈도, 리눅스, 맥 등 다양한 운영체제에서 설치할 수 있습니다. 여기에서는 윈도를 기준으로 설명 드립니다.
- anaconda 의 경우 별도로 파이썬을 설치할 필요가 없습니다.
- anaconda 는 파이썬 및 사용도가 높은 각종 라이브러리도 함께 설치하므로 보다 쉽게 개발환경을 구성할 수 있습니다.
- 윈도에서
1. anaconda3를 다운로드 받습니다.
2. 설치합니다. 별로 특별한 일은 없습니다. OKOK 하면 됩니다.
3. anaconda의 경우 GUI 툴(Navigator)이 포함되어 있지만 멋진 개발자라면 CLI를 사용하겠죠? 설치된 프로그램 중 Anaconda Prompt 를 실행합니다.
4. conda 명령어를 통해 설치되어 있는 환경을 확인해 봅니다.
(C:\Users\samsee\Anaconda3) C:\Users\samsee>conda info Current conda install: platform : win-64 conda version : 4.3.8 conda is private : False conda-env version : 4.3.8 conda-build version : not installed python version : 3.6.0.final.0 requests version : 2.12.4 root environment : C:\Users\samsee\Anaconda3 (writable) default environment : C:\Users\samsee\Anaconda3 envs directories : C:\Users\samsee\Anaconda3\envs package cache : C:\Users\samsee\Anaconda3\pkgs channel URLs : https://conda.anaconda.org/anaconda-fusion/win-64 https://conda.anaconda.org/anaconda-fusion/noarch https://repo.continuum.io/pkgs/free/win-64 https://repo.continuum.io/pkgs/free/noarch https://repo.continuum.io/pkgs/r/win-64 https://repo.continuum.io/pkgs/r/noarch https://repo.continuum.io/pkgs/pro/win-64 https://repo.continuum.io/pkgs/pro/noarch https://repo.continuum.io/pkgs/msys2/win-64 https://repo.continuum.io/pkgs/msys2/noarch config file : C:\Users\samsee\.condarc offline mode : False user-agent : conda/4.3.8 requests/2.12.4 CPython/3.6.0 Windows/10 Windows/10.0.14393
5. 함께 설치되어 있는 패키지 리스트도 봅니다.
(C:\Users\samsee\Anaconda3) C:\Users\samsee>conda list # packages in environment at C:\Users\samsee\Anaconda3: # _license 1.1 py36_1 alabaster 0.7.9 py36_0 anaconda 4.3.0 np111py36_0 anaconda-client 1.6.0 py36_0 anaconda-navigator 1.4.3 py36_0 astroid 1.4.9 py36_0 astropy 1.3 np111py36_0 ...
* 패키지를 검색하는 명령어는 conda search [패키지명 또는 키워드] 설치는 conda install [패키지명]
6. 파이썬 개발에는 Jupyter Notebook 이라는 도구가 많이 사용됩니다. 웹 기반의 IDE(통합개발환경)으로 코드 작성/실행과 함께 위키 문서(markdown) 작성도 할 수 있으며 웹에 게시하기 쉽기 때문에 파이썬 커뮤니티에서 널리 사용되고 있습니다. 어디 한번 실행해 봅시다.
(C:\Users\samsee\Anaconda3) C:\Users\samsee>jupyter notebook
7. 브라우저가 열리며 이런 모습이 나옵니다.
8. 이걸로 개발환경 설정이 (거의) 완료되었습니다. 참 쉽죠잉~
Jupyter Notebook 사용하기
Jupyter notebook 은 웹 기반의 개발 도구 입니다. 코드 편집 + 실행 + 문서화 + 시각화 까지 하나의 툴에서 할 수 있기 때문에 아주 유용합니다.
셀 = 일종의 쪽대본 같은 것입니다. 코드 조각을 이어가며 즉각적인 상호작용으로 쉽고 빠르게 동작하는 코드를 만들 수 있습니다.
- 노트북 만들기 : 노트북은 문서이며 하나의 프로젝트로 보시면 됩니다.
1. 오른쪽에 New 버튼을 누릅니다.
2. conda 에 만들어진 환경 목록이 표시됩니다. 개발하려는 환경을 선택하면 새로운 창이 표시됩니다.
3. !를 앞에 붙이면 커맨드를 실행할 수 있습니다. 현재 환경의 파이썬 버전을 확인해 봅시다.
!python --version 을 입력하고 Ctrl + Enter
- 코드 작성하기
1. 셀에는 코드를 입력하고 실행해 볼 수 있습니다.
2. 하나의 노트북 안에서는 노트북이 실행중인 동안에 컨텍스트가 유지됩니다. 앞서 실행한 셀에서 선언한 변수(함수)가 있다른 다른 셀에서도 사용할 수 있습니다.
3. 하나의 셀에 모든 코드를 넣을 수도 있지만 그것 보다는 코드 토막(snippets)을 계속 실행하고 결과를 확인하면 이어가는게 노트북 스러운 방법입니다.
4. 노트북은 vi 편집기와 비슷하게 편집 모드와 작성 모드를 따로 가지고 셀 밖에 클릭하면 편집 모드가 됩니다. 셀 안에서 커서가 깜짝이면 작성 모드입니다. 설명은 편집 모드에서 h!
5. 물론 노트북 메뉴에 있는 Help에 들어가셔도 나옵니다.
6. 셀을 아래에 추가하려면 b, 위에 추가하려면 a를 누릅니다. 그외에 여러 단축키가 있으니 설명을 참조하세요. 아참 자동완성은 Tab 을 누르시면 됩니다.
- 코드 실행하기
1. 실행할 셀을 선택하고 Ctrl + Enter
2. 셀의 마지막 평가식 값이 아래에 표시됩니다.
3. 평가식 값을 확인하는 것 외에 입력 받는 것도 가능합니다. Java와 같은 컴파일 언어에서 하려면 상당히 복잡하고 거추장스러운게 많은데 파이썬과 노트북 덕분에 쉽고 빠르게 작동하는 코드를 만들어낼 수 있죠.
- 마크다운 작성하기 : 노트북의 문서화를 위해 마크다운을 사용합니다.
1. 마크다운(markdown)은 깃허브에서 표준으로 사용하는 태그 언어 입니다. 위키처럼 쓰이기도 하죠.
2. 마크다운도 셀에 작성하며 현재 셀을 마크다운으로 바꾸려면 메뉴를 사용하시거나 편집 모드에서 m 을 입력하세요.
3. 마크다운 셀을 실행하면 포매팅 됩니다.
- 샘플 : 아래는 금융감독원 전자공시를 스크래핑 하는 코드의 일부입니다.
- 마크다운으로 설명을 작성하고 아래에 코드를 넣고 실행해보고 결과를 확인하고 틀렸으면 수정하여 다시 실행하고. 다 되었으면 셀을 추가하고 다음 부분을 작성하고…
- 주피터 노트북은 빠른 피드백이 가능하기 때문에 부분부분 결과를 확인하며 코드를 누적해야하는 스크래핑에 아주 적합한 개발환경입니다.