๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

๋‹ค์‹œ ๋„์ „.. Flask ์›น ์•ฑ ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ (3) ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป ๋ฐฑ์—”๋“œ(Back-End)/Node js

๋‹ค์‹œ ๋„์ „.. Flask ์›น ์•ฑ ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ (3)

์ง•์ง•์•ŒํŒŒ์นด 2022. 11. 15. 15:51
728x90
๋ฐ˜์‘ํ˜•

221115 ์ž‘์„ฑ

<๋ณธ ๋ธ”๋กœ๊ทธ๋Š” wikidocs ์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

https://wikidocs.net/82572

 

02-1 ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ

pythonanywhere์˜ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์—๋Š” ๊ตฌ๊ธ€ ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ฌด๋ฃŒ ์„œ๋ฒ„๋„ ๊ตฌ๊ธ€ ์›น์‚ฌ์ดํŠธ ์ ‘์†์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ด์šฉํ•ด์„œ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๊ฐœ์ˆ˜๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ์ฝ”๋“œ๋ฅผ …

wikidocs.net

 

 

๐Ÿ‘ ์‹œ์ž‘ ์ „..

  • pythonanywhere์˜ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์—๋Š” ๊ตฌ๊ธ€ ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ์Œ

 

๐Ÿ‘ ๊ธฐ๋ณธ์ ์ธ ์›นํŽ˜์ด์ง€ ๊ตฌ์ถ•

 

๐Ÿ‘ index.html ์„ธ๋ถ€์‚ฌํ•ญ

if ๋ฌธ๋ฒ• :  if ์˜†์— ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋ฉด True๋กœ ํŒ๋‹จ, ์›น ์„œ๋ฒ„์—์„œ ๊ฑด๋‚ด๋ฐ›์€๊ฒŒ ์—†์œผ๋ฉด ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๋Š” ์ƒ์„ฑ๋˜์ง€ ์•Š์Œ

{% if data %}
{% endif %}

 

 

for ๋ฌธ๋ฒ•

{% for k,v in data.items() %}
{{k}} {{v}}
{% endfor %}

 

 

loop.index ๋ฌธ๋ฒ•

{% for k,v in data.items() %}
{{loop.index}}
{% endfor %}

๐Ÿ›‘ ์ฐธ๊ณ 

: ์ค„๋ฐ”๊ฟˆ ํ•˜๋ฉด ์ƒ์„ฑ๋˜๋Š” div๋“ค ๊ฐ„์— ์—ฌ๋ฐฑ์ด ์ƒ๊น€

: ์ฝ”๋”ฉ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ html ์ž์ฒด๊ฐ€ ์š”์†Œ(element)๊ฐ„์˜ ๊ฐ„๊ฒฉ์„ 4px(๋˜๋Š” 0.25em)์ด ์ž๋™์œผ๋กœ ์ƒ๊ฒจ๋‚จ

: ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•ด -4px์„ ์—†์• ๊ฑฐ๋‚˜, ์ค„ ๋ฐ”๊ฟˆ ์—†์ด ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑ์‹œํ‚ค๋Š” ๊ฒƒ

=> ๋ณ€๊ฒฝ ์ „
{% for k,v in data.items() %}
    <div class="box box{{loop.index}}" value="{{v}}">{{k}}</div>
{% endfor %}

=> ๋ณ€๊ฒฝ ํ›„
{% for k,v in data.items() %}<div class="box box{{loop.index}}" value="{{v}}">{{k}}</div>{% endfor %}

 

๐Ÿ‘ ์ฝ”๋“œ ๋‚ด์šฉ

  • main.js
    • ํ˜„์žฌ ์—†์Œ..
  • style.css
h1{
    color : blue;
}
  • index.css
.box{
    border:5px solid black;
    width : 200px;
    height: 100px;
    display: inline-block;
    /* ํ…Œ๋‘๋ฆฌ(border)๋ฅผ ํฌํ•จํ•˜์—ฌ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ณ„์‹ผ */
    box-sizing: border-box;         
    margin : 0;
    color : white;
    font-weight: 900;
    /* ๊ธ€์ž๋ฅผ ์ค‘์•™ ์ •๋ ฌ */
    text-align: center;
    line-height: 90px;
}

.box1{
    background-color: orange;
}

.box2{
    background-color : blue;
}
  • index.html
<!-- ํ•„์š”ํ•œ html ํŒŒ์ผ์„ ๋ชจ์•„๋‘˜ ์˜ˆ์ • -->


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="{{url_for('static',filename='index.css')}}">
</head>
<body>
    <form action="/" method="post">
        <p><label for="keyword1">ํ‚ค์›Œ๋“œ1 </label><input type="text" name="keyword1" id="keyword1"></p>
        <p><label for="keyword2">ํ‚ค์›Œ๋“œ2 </label><input type="text" name="keyword2" id="keyword2"></p>
        <!-- <button type="submit">๊ฒ€์ƒ‰</button> -->
        <input type = "submit" value = "๊ฒ€์ƒ‰">
        
    </form>

        <!-- {{data}} -->
        <!-- whitespace๋ฅผ ์œ„ํ•ด 1์ค„ ์ฒ˜๋ฆฌ -->
    {% if data %}
    <div id="result">
        {% for k,v in data.items() %}<div class="box box{{loop.index}}" value="{{v}}">{{k}}</div>{% endfor %}
    {% endif %}

    <!-- {% if data %}
    <div id="result">
        {% for k,v in data.items() %}<div class="box {{loop.index}}" value="{{v}}">{{k}}</div>{% endfor %}
    </div>
    {% endif %} -->


    <script src="{{url_for('static',filename='index.js')}}"></script>
</body>
</html>
  • app.py
##### ์‹คํ–‰์‹œ ์„œ๋ฒ„๊ฐ€ ๊ฐ€๋™๋  ํŒŒ์ด์ฌ ํŒŒ์ผ #####
# ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ํŽ˜์ด์ง€์— ๋ณด๋‚ด์ฃผ๋„๋ก ๋งŒ๋“ค๊ธฐ

# /app.py
from flask import Flask, render_template, request
import google_keyword

#Flask ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
app = Flask(__name__)

@app.route('/',methods=('GET', 'POST')) # ์ ‘์†ํ•˜๋Š” url

def index():
    # ์›น ํŽ˜์ด์ง€์—์„œ name="xxx"์ธ ์š”์†Œ์˜ value ๊ฐ€์ ธ์˜ค๊ธฐ
    print(request.form.get('keyword1'))
    print(request.form.get('keyword2'))
    keyword1 = request.form.get('keyword1')
    keyword2 = request.form.get('keyword2')

    # ์œ„์˜ ๊ฐ’์ด ์žˆ์„ ๋•Œ๋งŒ ํฌ๋กค๋ง ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
    if keyword1 is not None and keyword2 is not None:
        data = {
            keyword1 : google_keyword.get_search_count(keyword1).get('number'),
            keyword2 : google_keyword.get_search_count(keyword2).get('number'), 
            }
        return render_template('index.html',data=data)
    else:
        return render_template('index.html')

# if __name__=="__main__":
#     app.run(debug=True)
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=1234 ,debug=True)
  • google_keyword.py
import requests
from bs4 import BeautifulSoup

def get_search_count(keyword):
    url = "https://www.google.com/search?q={}".format(keyword)
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'}
    res = requests.get(url, headers=headers)

    # HTML ์†Œ์Šค์ฝ”๋“œ, ์‚ฌ์šฉํ•  parser
    soup = BeautifulSoup(res.text, 'lxml')
    number = soup.select_one('#result-stats').text
    
    # print(number) # ๊ฒ€์ƒ‰๊ฒฐ๊ณผ ์•ฝ 7,320,000๊ฐœ (0.47์ดˆ) 
    # ๊ฐœ์ˆ˜๋งŒ ๋‚จ๊ธฐ๊ธฐ์œ„ํ•ด ์Šฌ๋ผ์ด์‹ฑ
    number = number[number.find('์•ฝ')+2:number.rfind('๊ฐœ')] # 7,320,000
    number = int(number.replace(',','')) # 7320000

    # ๊ฒ€์ƒ‰์–ด์™€ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ์ˆ˜์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ dict์œผ๋กœ ๋ฐ˜ํ™˜
    return {'keyword':keyword, 'number':number}

if __name__ == '__main__':
    print(get_search_count("๋‚˜๋ฃจํ† "))

 

๐Ÿ‘ ๊ฒฐ๊ณผ

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•
Comments