상세 컨텐츠

본문 제목

파이썬으로 웹 스크레핑과 반응형 대시보드 앱 만들기

파이썬·장고·루비·알고리즘

by 김일국 2023. 3. 13. 20:10

본문

최근에 작업한 파이썬 포트폴리오를 파이썬애니웨어 클라우드( https://www.pythonanywhere.com/ )

에 배포해 보았다. 배포 URL:   https://kimilguk.pythonanywhere.com/

- 개발 테스트 : 구름ide 클라우드 무료 파이썬 컨테이너에서 [주피터 노트북]으로 python 실습 및 웹 앱 테스트

- 배포 환경: 파이썬 애니웨어 클라우드(무료버전, 용량 500M) 

- 소스는 깃 허브에 : https://github.com/kimilguk/python-dash

- 아래는 pythonAnywhere 클라우드에 배포 후 실행 한 결과 미리보기 이다.

- 원격 URL(네이버, 야후)에서 가져오는 데이터는 pythonAnywhere 사이트가 막혀 있는지 403 권한오류 때문에 데이터를 가져올 수 없어서 클라우드 사이트에서는 메뉴에서 제외 시켰다.

- 단, 구름ide 클라우드의 파이썬 컨테이너 환경에서는 403 권한오류 없이 잘 가져온다.(아래 구름ide에서 작동하는 화면)

- 구름ide 클라우드는 무료버전일 때는 도메인이 작업 중에만 살아 있어서, 위 도메인은 확인 할 수 없다.

- 파이썬 애니웨어 사이트 이용방법 및 기술 참조에 필요한 내용 요약(아래)

- 우선 기존 장고 사이트는 제거했다. https://gitlab.com/ilguk/KIK_profile (기존 장고 프로젝트 제거된 소스보관 위치)

- 아래는 pythonAnywhere 사이트에서 작업한 내역이다.

 

파이썬애니웨어 사이트 Consolea메뉴(에서 Bash 쉘 콘솔로 진입)
git clone https://github.com/kimilguk/python-dash.git (깃허브 소스복사)
git fetch --all (원격에서 수정한 전 파일 받기)
git reset --hard origin/master (내PC의 수정 전으로 소스 돌리기)
git pull origin master (수정한 부분만 새로 받기)
cd python-dash (프로젝트 폴더이동)
rm -rf notebooks (무료용량 부족때문에 폴더 삭제)
python --version (버전확인)
virtualenv --python=python3.7 myvenv (파이썬3.7버전으로 앱 가상환경 만듬)
source myvenv/bin/activate (앱 가상환경설정 로드) 또는 아래에서 가상환경 진입
파이썬애내웨어 사이트 Web메뉴(에서 가상환경(virtualenv) 설정하기)
"가상환경(Virtualenv)" 섹션에서 가상환경 경로를 입력(Enter the path to a virtualenv)라고 쓰여 있는 빨간색 글자를 클릭
/home/<your-username>/python-dash/myvenv/ 라고 입력(이동 경로 저장을 하려면 파란색 박스에 체크 표시를 하고 클릭)
uname -a (리눅스 버전확인)
pip3 show 설치된모듈명
pip3 install dash (dash-html-components, dash-core-components, Flask, dash-table, plotly 모듈이 한꺼번에 자동으로 설치된다.
파이썬에서 위 5가지를 모듈을 사용하여 웹 페이지 앱을 구성할 수 있다.
dash-html/core-components는 웹 컨텐츠 사용, 내장된 Flask는 웹 서버, dash-table은 표 데이터 사용, plotly는 대화형 챠트 사용
)
pip3 install yfinance (야후 파이낵스에서 주식 데이터를 가져올 수 있다.)
pip3 install dash_bootstrap_components (대시보드 앱용 부트스트랩 디자인 콤포넌트 사용)
pip3 install feedparser (RSS 형식의 데이터를 파싱할 수 잇다)

- 위 작업을 완료 한 후 사이트에서 아래 Web 정보를 변경해 주어야 한다.

- 위 Virtualenv 항목에서 /home/kimilguk/python-dash/myvenv/ 처럼 가상 환경 경로를 지정한다. 

- 위 WSGI 정보를 클릭하여 수정 창에서 장고 또는 대시보드모듈을 사용하도록 설정한다.(아래)

- 위 2가지만 작업 한 후 아래 화면 처럼 [Reload 본인 도메인 아이콘]을 클릭하면 완료된다.

import os
import sys

project_home = u'/home/kimilguk/python-dash'
if project_home not in sys.path:
    sys.path = [project_home] + sys.path
# 최초로 실행할 app.py 파일명만 apps.py 로 변경
from apps import app
application = app.server

# 아래 장고용
# path = '/home/kimilguk/KIK_profile'  # 자신의 프로젝트 폴더 경로
# if path not in sys.path:
#     sys.path.append(path)

# os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

# from django.core.wsgi import get_wsgi_application
# from django.contrib.staticfiles.handlers import StaticFilesHandler
# application = StaticFilesHandler(get_wsgi_application())

ps. 위에 설치한 모듈에 추가로, 기술 참조용 책에서 사용한 주피터 노트북 소스를 구름ide 클라우드 파이썬 컨테이너 에서 실습할 때 필요한 작업은 아래와 같다.

- 참고 서적 : 위키 북스

파이썬 웹 스크레이핑 완벽 가이드

https://wikibook.co.kr/pyscraping/

- 참고 사이트: 동국대학교 데이터 과학 사이트 http://bigdata.dongguk.ac.kr/lectures/datascience/_book/a4.-dash%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-python-dashboard.html

+++pythonAnywhere 서버배포에서는 생략-시작 (구름ide 클라우드의 파이썬 컨테이너에서는 필요하다)

 

####  파이썬 애니웨어 클라우드에 배포시 pages 내용도 변경 matplotlib, iPython 부분 주석처리함(아래2개)

pip3 install matplotlib (주피터 노트북에 데이터프레임을 그래프로 출력하게 한다.)
pip3 install IPython (주피터 노트북에 HTML 링크와 같은 효과를 줄 수 있다. from IPython.display import HTML)

#### 클라우드 배포용으로 웹에서 사용하지 않는 모듈은 설치하지 않고 확인만(아래)
pip3 install bs4 (BeautifulSoup 설치) 
pip3 install lxml (BeautifulSoup를 이용해 HTML 소스를 파싱)pip3 install schedule (스케줄 예약 기능을 사용할 수 있다.)

pip3 install xlrd (xls, 엑셀파일 내용을 불러올 수 있다.)
pip3 install openpyxl(xls,xlsx모두 불러올 수 있다.)

pip3 install selenium==3.14.1 (모듈의 기본 설치는 4.x 이다. 동적인 웹 페이지 스크래핑 할 수 있다.)

[구름ide 우분투리눅스 bash쉘로 이동 후]

(한글 폰트 작업 시작)
apt install fonts-nanum (우분투에 한글 폰트 설치)
fc-cache -fv (우분투에 시스템에서 폰트 업데이트)
fc-list (나눔 폰트가 잘 설치되었는지 확인)
rm -rf ~/.cache/matplotlib/* (matplotlib 라이브러리의 캐시를 삭제)
아래 1개 항목은 할 필요없다. Matplotlib 패키지 안에 폰트 복사 (본인의 파이썬 버전에 맞게 수정)
cp /usr/share/fonts/truetype/nanum/Nanum* /usr/local/lib/python3.7/site-packages/matplotlib/mpl-data/fonts/ttf/
앞으로 Dash-그래프 수업에서 웹 앱에서 출력할 때는 plotly 모듈을 사용하면 한글 문제는 나타나지 않는다.
(한글 폰트 작업 끝)

크롬 설치(아래부터는 우분투 리눅스용)
wget -q -O - dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
apt-get update
apt-get install -y google-chrome-stable
google-chrome --version (크롬 설치 확인)
위에서 사용하는 크롬 버전에 맞는 크롬드라이버 다운로드: https://chromedriver.chromium.org/downloads
wget -N https://chromedriver.storage.googleapis.com/110.0.5481.77/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
chmod +x chromedriver {실행 파일로 만들기 할 필요 없음}
mv -f chromedriver /usr/local/share/chromedriver
ln -s /usr/local/share/chromedriver /usr/local/bin/chromedriver
ln -s /usr/local/share/chromedriver /usr/bin/chromedriver
rm chromedriver_linux64.zip
apt-get update
apt-get install -y libgconf-2-4 (우분투리눅스에서 크롬브라우저 실행에 필요한 라이브러리설치)

[구름ide 우분투리눅스 bash쉘 작업 여기 까지]


+++pythonAnywhere 서버배포에서는 생략-끝 (구름ide 클라우드의 파이썬 컨테이너에서는 필요하다)

 

#### 파이썬 웹 스크레핑과 반응형 대시보드 앱 만들기 수업 순서 아래 총 10장으로 구성된다.

- Chapter_01_파이썬 개발환경 세팅 : 구름 ide 클라우드 파이썬 컨테이너 + 주피터 노트북 + 필요한 모듈 설치

- Chapter_02_Python_Basic.ipynb : 파이썬 문법 기초 익히기
- Chapter_03_function_class_module.ipynb : 파이썬 함수와 클래스(모듈) 사용하기
- Chapter_04_Text_Read_Wrtie_String_Processing.ipynb : 파이썬에서 파일 입출력 처리하기
- Chapter_05_NumPy_pandas.ipynb : 파이썬에서 NumPy로 수식+배열 데이터처리와 Pandas로 표 데이터(2차원)처리 하기
- Chapter_06_Web_Scraping.ipynb : RSS 및 웹 페이지의 태그 데이터를 스크래핑한 내용을 html로 저장 및 디자인 후 출력하기
- Chapter_07_Selenium.ipynb : 동적인 웹 페이지를(예, 로그인 인증 후 화면을) 스크래핑 할 때 파이썬으로 제어하는 원격 크롬 브라우저를 셀레니엄으로 제어하기
- Chapter_08_Web_API.ipynb : 네이버 API, 야후주식 등에서 제공하는 API를 이용하여 데이터를 받아서 매트랩(고정)과 플로틀리(인터렉티브) 챠트로 시각화하기
- Chapter_09_Dash_Web_App.ipynb : 부트스트랩 디자인기반의 인터렉트브 액션으로 위에서 출력한 챠트 및 표를 멀티 html 페이지 에 출력하기
- Chapter_10_Kakao_API.ipynb : 위에서 스크래핑한 결과 텍스트(날씨, 증권, 환율정보 등)을 파이썬 스케줄로 카카오 톡 메세지로 보내기

관련글 더보기

댓글 영역