본문 바로가기
Base/Python

32. 외부 모듈(라이브러리) - Beautifulsoup, flask

by 귀멸 2023. 7. 7.

혼공파 92~ 93강 (마지막)

 

1. 필요한 외부 모듈 찾기

# 기본 내장 모듈 (built-in module)
## math / sys / time ...

# 외부 모듈(external module)
# 터미널: pip install 모듈이름   으로 설치
## pip install Flask   (웹서버)
## pip install beautifulsoup4  (데이터 크롤링 - 분석)
## pip install tensorflow   (인공지능)

# 필요한 외부 모듈을 찾는 방법
# (1) 책에서 모듈 찾기
# 파이썬 웹 프로그래밍 : Django, Flask
# 머신러닝 : scikit-learn, tensorflow
# 스크레이핑 : requests, beautifulsoup
# 영상 분석 : cv2, pillow

# (2) 파이썬 커뮤니티에 가입한다.
# 현재 어떤 외부 모듈이 인기인지 확인

# (3) 그냥 검색
# -> 구글 검색 / ChatGPT
# midi 조작 -> python midi : python-midi, midi, Mido
# 웹캠 조작 -> python webcam : cv2, webcam-streamer
 

2. BeautifulSoup4 맛보기

터미널 : pip install beautifulsoup4 로 모듈 설치 후,

기상청 사이트에서 RSS로 데이터 스크래핑

url 주소 획득해서 사용하면 날씨 데이터를 출력해 준다.

# beautifulsoup4 : HTML/XML 데이터 분석, 스크레이핑
from urllib import request
from bs4 import BeautifulSoup

기상청주소 = "http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108"
데이터 = request.urlopen(기상청주소)

soup = BeautifulSoup(데이터, 'lxml-xml')

# soup.select()       # 특정 이름을 가진 태그를 모두 찾아준다.
# soup.select_one()   # 특정 이름을 가진 태그를 하나만 찾아준다.

for location in soup.select("location"):
    city = location.select_one("city").string
    print(city)    
    for data in location.select("data"):
        print(data.select_one("tmEf").string)
        print(data.select_one("wf").string)
        print(data.select_one("tmn").string)
        print(data.select_one("tmx").string)

3. flask 맛보기

터미널 : pip install flask

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
    return "<h1>안녕하세요!</h1>"
@app.route("/introduce")
def introduce():
    return "<h1>저를 소개합니다!</h1>"

터미널에서 아래와 같이 실행해주면 페이지 주소를 준다.

페이지 주소에 가면 아래와 같이 페이지 송출.

위의 Beautifulsoup 모듈과 결합해서 사용해 보면

from flask import Flask
from urllib import request
from bs4 import BeautifulSoup

기상청주소 = "http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=108"
데이터 = request.urlopen(기상청주소)

app = Flask(__name__)

@app.route("/")
def hello():
    output = ""
    soup = BeautifulSoup(데이터, 'lxml-xml')
    for location in soup.select("location"):
        도시 = location.select_one("city").string
        for data in location.select("data"):
            시간 = data.select_one("tmEf").string
            기상상태 = data.select_one("wf").string
            최저기온 = data.select_one("tmn").string
            최고기온 = data.select_one("tmx").string
            output += f"<h1>{도시}  {시간}  {기상상태}  {최저기온}  {최고기온}</h1>"
    return output


4. 라이브러리와 프레임워크

# 라이브러리
## 정상 제어를 하는 모듈
### 정상 제어 : 모듈의 기능을 개발자가 직접 호출하는 것
import math
math.sin()

# 프레임워크
## 제어 역전이 발생하는 모듈
### 제어 역전: 모듈이 개발자가 만든 기능을 호출하는 것
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
    return "<h1>안녕하세요!</h1>"
    
# hello()를 호출한 적이 없지만 flask가 가져다가 사용하고 있음

여러가지 외부 모듈을 사용하여 다양한 문제를 해결하는 코드를 작성할 수 있다.

구글링, ChatGPT를 사용해서 방법을 찾는다.

 

100 ~ 1000 사이의 소수(prime number)의 개수는 몇개인가?

from sympy import isprime

count = 0
for i in range(100, 1000 + 1):
    if isprime(i):
        count += 1

print(f"100 ~ 1000 사이의 소수는 {count}개 입니다.")

 

댓글