본문 바로가기
Flask/웹개발

[GPT] 웹개발 3주차 | Python

by jungmin.park 2023. 10. 15.

크롤링

1. BeautifulSoup 

import requests
from bs4 import BeautifulSoup

URL = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=0&ie=utf8&query=날씨"
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get(URL, headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')

# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')

# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')

 * img src 값을 가져와야 할 때

tr = soup.select_one('.lst50')
image = tr.select_one('img')['src']

 

Flask 시작하기

from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
    return 'This is Home!'

if __name__ == '__main__':  
    app.run(debug=True)

1. URL에 따라 다른 화면 보여주기 : @app.route('/') 괄호 안의 부분 수정

  * 주의할 점

     - url 별로 함수명이 같거나,

     - route('/') 내의 주소가 같으면 안된다.

from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
   return 'This is Home!'

@app.route('/mypage')
def mypage():  
   return 'This is My Page!'

if __name__ == '__main__':  
   app.run(debug=True)

 2.  html 파일 불러오기

app.py에 flask 내장함수 render_template를 이용해서 HTML 파일을 불러올 수 있음.
from flask import Flask, render_template
app = Flask(__name__)

## URL 별로 함수명이 같거나,
## route('/') 등의 주소가 같으면 안됩니다.

@app.route('/')
def home():
   return render_template('index.html')

if __name__ == "__main__":
    app.run(debug=True)

3. 데이터 넘겨주기

변수에 원하는 데이터를 넣고, render_template('index.html' , 데이터이름=데이터) 방식으로 코드 추가
@app.route('/')
def home():
    name = "최지웅"
    lotto = [16, 18, 20, 23, 32, 43]
	# 데이터를 여러개 넘겨줄때 딕셔너리 사용
    context = {
        "name": name,
        "lotto": lotto,
    }
    
    return render_template('index.html',  data=context)

* 코드 작성(index.html)

<body>
    <h1>안녕, {{ data.name }}</h1>
    <h2>로또 번호: {{ data.lotto }}</h2>
</body>

* 리스트의 경우 값을 하나씩 출력시켜주기 위해(index.html) : 단축키 ffor

<body>
    {% for number in data.lotto %}
            <li>{{ number }}</li>
    {% endfor %}
</body>

4. 이미지 불러오기( 주로 static 폴더 안에 이미지 파일을 넣어 사용)

이미지 태그는 url_for를 활용해주시면 됩니다.
url_for는 보통 경로(위치)를 표현할 수 있습니다.

아래와 같이 이미지 경로 부분만 바꿔주시면 쉽게 이미지를 쓸 수 있습니다!
<img src="{{ url_for('static', filename='이미지 경로') }}" alt="">

5. form 만들기

form 은 회원 가입, 검색, 게시글 작성에 사용하는데요.
form 에 데이터를 입력하고 전송 버튼을 누르면, 입력한 데이터가 서버로 전송됩니다.
action 에는 url_for 로 데이터를 보낼 url을 설정해주고, name 속성을 활용해서 데이터에 명찰을 붙여줍니다.
</aside>
<form action="{{ url_for('movie') }}">
  <input type="text" name="query">
  <button type="submit">검색</button>
</form>

* < form action="{{ url_for('movie') }}"> : app.py에 있는 movie 함수로 데이터를 보냄

* HTML에서 보낸 값을 받아오기 

movie 함수에서 request.args.get('name 속성명') 활용
from flask import Flask, render_template, request


@app.route('/movie')
def movie():
	# html에서 name=query 값을 가진 컴포넌트가 있어야 함.
    print(request.args.get('query'))
    return render_template('movie.html')

'Flask > 웹개발' 카테고리의 다른 글

[GPT] 웹개발 4주차 | Flask & DB  (0) 2023.10.15
[GPT] 웹개발 2주차 | Javascript&JQuery  (1) 2023.10.15
[GPT] 웹개발 1주차 | HTML&CSS  (0) 2023.10.15