2020-10-08 09:42:06

지난 시간에 코로나 일일 확진수를 Beautiful Soup 라이브러리를 활용해서 웹 스크레이핑(scraping)하는 법에 대해서 살펴봤습니다.

 

오늘은 Flask를 활용해서 웹 스크레이핑 한 결과를 제공하는 웹 서버를 만들어보겠습니다. 참고로 지금 사용하고 있는 제 노트북을 서버 컴퓨터로 삼을 것입니다. 

 

우선 flask 모듈을 설치해줘야 합니다. 명령프롬프트 또는 터미널에 pip install flask로 설치해주세요. 그리고 아래와 같은 파이썬 스크립트를 하나 준비합니다. 이름은 test.py와 같이 알아서 정해주세요. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from flask import Flask
from urllib import request
from bs4 import BeautifulSoup
 
app = Flask(__name__)
@app.route("/")
 
def hello():
    target = request.urlopen("http://ncov.mohw.go.kr/")
    soup = BeautifulSoup(target, "html.parser")
    nums = []
 
    for item in soup.select("div.datalist"):
        for data in item.select("span.data"):
            nums.append(int(data.string))
 
    print("오늘 코로나 확진자수: ", sum(nums), "명")
 
    return "<h1>오늘 코로나 확진자수: "+str(sum(nums))+"명</h1>"
 
app.run(host="0.0.0.0", port="5000", debug=True)
cs

 

그 다음에는 명령프롬프트 또는 터미널에 다음과 같이 명령해주면 웹 서버가 작동합니다. 

 

set FLASK_APP=test.py

flask run --host=0.0.0.0 --port=5000

 

리눅스의 경우에는 다음과 같이 명령해줍니다. 

 

export FLASK_APP=test.py

flask run --host=0.0.0.0 --port=5000

 

5000포트를 열어주었는데, 외부에서 이 서버에 접속하게 하려면 포트포워딩을 해줘야 합니다. 포트포워딩을 해줘야 저희 집의 공유기까지 온 요청이 서버인 제 노트북까지 도달합니다. 만약 포트포워딩을 했는데도 안되면, 인바운드 규칙 설정도 해줘야 합니다.

 

와이파이가 아닌 모바일데이터에 연결되어 있는 제 스마트폰으로 이 서버에 접속해보도록 하겠습니다. 웹 브라우저에 [내IP주소]:5000을 입력하면 접속됩니다. 만약 내IP주소가 123.456.789.123이라면 123.456.789.123:5000을 입력합니다. 

 

 

서버가 잘 작동해서 오늘 코로나 확진자수에 대한 내용을 잘 제공하고 있는 것을 확인할 수 있습니다. 

 

관련 글

[1] [python] 오늘의 코로나 확진자수 스크레이핑하기 (Beautiful Soup 활용)

[2] 쉽게 따라하는 ipTIME 공유기 포트포워드 설정하기