프로젝트 세팅

 

디렉터리 및 app.py파일 생성
mars에 패키지 설치

flask, pymongo, dnspython 3개 설치

 

 

 

뼈대 준비하기

 

from flask import Flask, render_template, request, jsonify
app = Flask(__name__)

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

@app.route("/mars", methods=["POST"])
def web_mars_post():
    sample_receive = request.form['sample_give']
    print(sample_receive)
    return jsonify({'msg': 'POST 연결 완료!'})

@app.route("/mars", methods=["GET"])
def web_mars_get():
    return jsonify({'msg': 'GET 연결 완료!'})

if __name__ == '__main__':
    app.run('0.0.0.0', port=5000, debug=True)

app.py 파일에 입력

 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
          integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
            integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
            crossorigin="anonymous"></script>

    <link href="https://fonts.googleapis.com/css2?family=Gowun+Batang:wght@400;700&display=swap" rel="stylesheet">

    <title>선착순 공동구매</title>

    <style>
        * {
            font-family: 'Gowun Batang', serif;
            color: white;
        }

        body {
            background-image: linear-gradient(0deg, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('https://cdn.aitimes.com/news/photo/202010/132592_129694_3139.jpg');
            background-position: center;
            background-size: cover;
        }

        h1 {
            font-weight: bold;
        }

        .order {
            width: 500px;
            margin: 60px auto 0px auto;
            padding-bottom: 60px;
        }

        .mybtn {
            width: 100%;
        }

        .order > table {
            margin: 40px 0;
            font-size: 18px;
        }

        option {
            color: black;
        }
    </style>
    <script>
        $(document).ready(function () {
            show_order();
        });

        function show_order() {
            $.ajax({
                type: 'GET',
                url: '/mars',
                data: {},
                success: function (response) {
                    alert(response['msg'])
                }
            });
        }

        function save_order() {
            $.ajax({
                type: 'POST',
                url: '/mars',
                data: {sample_give: '데이터전송'},
                success: function (response) {
                    alert(response['msg'])
                }
            });
        }
    </script>
</head>
<body>
<div class="mask"></div>
<div class="order">
    <h1>화성에 땅 사놓기!</h1>
    <h3>가격: 평 당 500원</h3>
    <p>
        화성에 땅을 사둘 수 있다고?<br/>
        앞으로 백년 간 오지 않을 기회. 화성에서 즐기는 노후!
    </p>
    <div class="order-info">
        <div class="input-group mb-3">
            <span class="input-group-text">이름</span>
            <input id="name" type="text" class="form-control">
        </div>
        <div class="input-group mb-3">
            <span class="input-group-text">주소</span>
            <input id="address" type="text" class="form-control">
        </div>
        <div class="input-group mb-3">
            <label class="input-group-text" for="size">평수</label>
            <select class="form-select" id="size">
                <option selected>-- 주문 평수 --</option>
                <option value="10평">10평</option>
                <option value="20평">20평</option>
                <option value="30평">30평</option>
                <option value="40평">40평</option>
                <option value="50평">50평</option>
            </select>
        </div>
        <button onclick="save_order()" type="button" class="btn btn-warning mybtn">주문하기</button>
    </div>
    <table class="table">
        <thead>
        <tr>
            <th scope="col">이름</th>
            <th scope="col">주소</th>
            <th scope="col">평수</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td>홍길동</td>
            <td>서울시 용산구</td>
            <td>20평</td>
        </tr>
        <tr>
            <td>임꺽정</td>
            <td>부산시 동구</td>
            <td>10평</td>
        </tr>
        <tr>
            <td>세종대왕</td>
            <td>세종시 대왕구</td>
            <td>30평</td>
        </tr>
        </tbody>
    </table>
</div>
</body>
</html>

index.html파일 templates디렉터리에 생성 후 입력

 

mongo DB 실행

 

 

 

POST 연습(주문 저장)

 

 

1. 클라이언트와 서버 연결 확인하기

기본 틀
주문하기 클릭

 

function save_order() {
    $.ajax({
        type: 'POST',
        url: '/mars',
        data: {sample_give: '데이터전송'},
        success: function (response) {
            alert(response['msg'])
        }
    });
}

index.html파일에 POST 방식 /mars에 sample_give: '데이터전송' 을 가지고 app.py파일에 요청

@app.route("/mars", methods=["POST"])
def web_mars_post():
    sample_receive = request.form['sample_give']
    print(sample_receive)

app.py 파일에서 받아서 index.html에서 받아온 sample_give값을 sample_receive 로

변수 선언 후 프린트

출력 확인

return jsonify({'msg': 'POST 연결 완료!'})

출력되고 해당 값을 index.html로 보냄

success: function (response) {
    alert(response['msg'])
}

해당 값을 받아서

msg값을 alert 띄움 // 서버연결 확인

 

 

 

 

2. 서버 만들기 ( name, address, size 정보를 받아서, 저장 )

@app.route("/mars", methods=["POST"])
def web_mars_post():
    name_receive = request.form['name_give']
    address_receive = request.form['address_give']
    size_receive = request.form['size_give']
    
    return jsonify({'msg': 'POST 연결 완료!'})

name, address, size 변수 선언

 

dbprac 파일 가져와서 mongodb 주소 위에 세줄 복사
app.py에 3줄 붙여넣기

 

@app.route("/mars", methods=["POST"])
def web_mars_post():
    name_receive = request.form['name_give']
    address_receive = request.form['address_give']
    size_receive = request.form['size_give']
    
    doc = {
        'name':name_receive,
        'address':address_receive,
        'size':size_receive,
    }
    db.mars.insert_one(doc)
    
    return jsonify({'msg': '주문 완료!'})

완성코드

해당 값을 가져와서 doc(db)에 저장해라

 

주문 완료! 변경 

 

 

 

3. 클라이언트 만들기

 

서버로 데이터를 가져가야됨 name, adress, size id값 확인

 

function save_order() {
    let name = $('#name').val()
    let address = $('#address').val()
    let size = $('#size').val()

가져와야되는 데이터 변수선언 $('#id값')

$.ajax({
    type: 'POST',
    url: '/mars',
    data: { name_give: name, address_give: address, size_give:size },

app.py(서버)가 가져오라는 데이터 값 name_give, address_give, size_give 입력

 

alert(response['msg'])
window.location.reload()

입력이 완료 되면 새로고침

 

function save_order() {
    let name = $('#name').val()
    let address = $('#address').val()
    let size = $('#size').val()

    $.ajax({
        type: 'POST',
        url: '/mars',
        data: { name_give: name, address_give: address, size_give:size },
        success: function (response) {
            alert(response['msg'])
            window.location.reload()
        }
    });
}

완성 코드

 

이름, 주소, 평수 입력 후 주문하기 클릭
mongodb 확인 mars에 입력한 값이 잘 나오는 모습

 

 

 

GET 연습(주문 보여주기)

 

 

1. 클라이언트와 서버 확인하기

@app.route("/mars", methods=["GET"])
def web_mars_get():
    return jsonify({'msg': 'GET 연결 완료!'})

새로고침 후 잘 연결됫는지 확인

2.서버 만들기

dbprac파일에서 가져오기 (여러개 찾기)

@app.route("/mars", methods=["GET"])
def web_mars_get():
    order_list = list(db.mars.find({}, {'_id': False}))
    return jsonify({'orders':order_list})

db.mars.find 로 변경 및 변수 이름 order_list 변경

'orders':order_list // ordrs라는 키로 orser_list를 받아옴

 

 

 

 

3. 클라이언트 만들기

 

console.log로 response 찍어보기 // 서버 재 실행 후 새로고침
orders가 들어와있는거 확인
하나 더 추가 해보기
추가한거 출력 되는 모습

success: function (response) {
    let rows = response['orders']
    for (let i = 0; i < rows.length; i++) {
        let name = rows[i]['name']
        let address = rows[i]['address']
        let size = rows[i]['size']

        console.log(name,address,size)
    }
}

for문으로 붙여서 콘솔 찍어보기

let temp_html = `<tr>
                <td>${name}</td>
                <td>${address}</td>
                <td>${size}</td>
            </tr>`
$('#order-box').append(temp_html)

콘솔 찍어보고 잘 나오면 그밑에 temp_html 작성

tbody id값 만들고 //&nbsp; 붙여올꺼 <tr> </tr> 부분 temp_html ``(뺵틱)으로 넣고 // order-box append(temp_html)
마지막으로 기존에 있던거 삭제

 

테스트3 입력 해보기
밑에 테스트3 추가 되는 모습

Flask 시작

 

1. 서버 만들기

 

flask 패키지 설치

 

from flask import Flask
app = Flask(__name__)

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


if __name__ == '__main__':
   app.run('0.0.0.0',port=5000,debug=True)

port=5000 @app.route('/') 접속 확인

 

from flask import Flask
app = Flask(__name__)

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

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

if __name__ == '__main__':
   app.run('0.0.0.0',port=5000,debug=True)

mypage 추가 

/mypage 접속 확인 url 나눔

 

 

 

2. HTML파일 주기

 

Flask 서버를 만들 때, 항상, 프로젝트 폴더 안에,

ㄴstatic 폴더 (이미지, css파일을 넣어둡니다)

ㄴtemplates 폴더 (html파일을 넣어둡니다)

ㄴapp.py 파일

이렇게 3개 만들어 놓고 시작 

 

templates 디렉터리에 index.html 파일 생성

from flask import Flask, render_template
app = Flask(__name__)

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


if __name__ == '__main__':
   app.run('0.0.0.0',port=5000,debug=True)

flask 내장함수 render_template를 이용 index.html 파일 불러오기

 

서버에서 index.html 파일 불러오는 모습

 

 

 

3. 본격 API 만들기

 

1. Jquery 임포트

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

 

2. GET 요청 확인 Ajax코드

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script>
        function hey() {
            $.ajax({
                type: "GET",
                url: "/test?title_give=봄날은간다",
                data: {},
                success: function (response) {
                    console.log(response)
                }
            })
        }

    </script>
</head>
<body>
  <h1>나의 첫 웹페이지!</h1>
  <button onclick="hey()">버튼을 만들자</button>
</body>
</html>

hey() 함수 만들어서 버튼 온클릭 설정 

"/test?라는 창구에 가는데 title_give라는 이름으로 봄날은간다 라는 데이터를 갖고갈께

(주민등록번호 라는 키 값으로 900120- .. 을 가져온 것과 같은 의미)

잘 된다면 너가 주는 데이터를 콘솔에 찍어볼께

 

3. GET 요청 API코드

from flask import Flask, render_template, request, jsonify
app = Flask(__name__)

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

@app.route('/test', methods=['GET'])
def test_get():
   title_receive = request.args.get('title_give')
   print(title_receive)
   return jsonify({'result':'success', 'msg': '이 요청은 GET!'})


if __name__ == '__main__':
   app.run('0.0.0.0',port=5000,debug=True)

request, jsonify 추가

title_give라는 이름으로 뭔가를 받아와서 변수에 넣음

title_receive 출력

 

버튼을 만들자 클릭하면 

봄날은간다를 가져가고 appy.py 이동
봄날은 간다 변수에 넣고 출력
봄날은간다 출력 확인
이 값이 다시 index.html로 이동
콘솔창에 출력
출력 확인

 

4. POST 요청 확인 Ajax코드 

<script>
    function hey(){
        $.ajax({
            type: "POST",
            url: "/test",
            data: {title_give: '봄날은간다'},
            success: function (response) {
                console.log(response)
            }
        })

    }

</script>

/test에 title_give: '봄날은간다' 를 가져간다

4. POST 요청 API코드

@app.route('/test', methods=['POST'])
def test_post():
   title_receive = request.form['title_give']
   print(title_receive)
   return jsonify({'result':'success', 'msg': '이 요청은 POST!'})

 

./test 라는 창구를 만들었고 그 창구에서는 POST만 받는 것은 이쪽으로 와라 ( methods=['GET']) GET은 GET 쪽으로

GET이랑 동일하게 title_receive = request.form['title_give'] 변수 선언

그리고 title_receive 출력

 

버튼을 만들자 클릭

index.thml 파일에 hey()에 ajax 요청 

/test라는 창구에 POST요청

app.py파일에서 /test라는 창구에 POST 찾음

title_give:'봄날은간다' 데이터를 가져왔는 확인 후 

title_give 변수 선언 후 출력

출력 확인

return jsonify({'result':'success', 'msg': '이 요청은 POST!'})

해당값을 index.html에 리턴 

해당 값 콘솔 출력
출력 확인
msg 값만 출력

이렇게 나오면 완성 ( 순위 / 곡 제목 / 가수를 스크래핑 )

 

1. 크롤링 준비하기 

import requests
from bs4 import BeautifulSoup


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('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

URL만 크롤링할 사이트로 변경 후 print{soup) 잘 나오는 실행 시켜보기

 

밑줄 친 곳 크롤링&nbsp;copy -> copy selector

 

import requests
from bs4 import BeautifulSoup


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('https://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20210701',headers=headers)

#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.number
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.title.ellipsis
#body-content > div.newest-list > div > table > tbody > tr:nth-child(1) > td.info > a.artist.ellipsis

soup = BeautifulSoup(data.text, 'html.parser')

#body-content 크롤링 할 부분 차례대로 넣어 놓기

 

musics = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

for music in musics:
        rank = music.select_one('td.number').text[0:2].strip()
        title = music.select_one('td.info > a.title.ellipsis').text.strip()
        artist = music.select_one('td.info > a.artist.ellipsis').text


        print(rank,title,artist)

musics = soup.select(' ') 부분에 동일한 부분까지 #body ~ tr 까지 복, 붙

 

for문 작성 

rank = music.select_one( ' ' ) 틀린 부분 td부터 복, 붙 동일하게 title, artist도 작성

 

 

 

rank = music.select_one('td.number').text

.text 출력 결과 // 공백과 순위상승 필요 없는 글씨까지 출력 됨

rank = music.select_one('td.number').text[0:2]

.text[0:2] 출력 결과 // 앞에서 두글자만 끊기 // 필요 없는 글씨 삭제되서 출력 // 아직 공백 존재

rank = music.select_one('td.number').text[0:2].strip()

.strip() 으로 공백까지 제거된 모습

 

import requests
from bs4 import BeautifulSoup


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('https://www.genie.co.kr/chart/top200?ditc=M&rtm=N&ymd=20210701',headers=headers)



soup = BeautifulSoup(data.text, 'html.parser')

musics = soup.select('#body-content > div.newest-list > div > table > tbody > tr')

for music in musics:
        rank = music.select_one('td.number').text[0:2].strip()
        title = music.select_one('td.info > a.title.ellipsis').text.strip()
        artist = music.select_one('td.info > a.artist.ellipsis').text


        print(rank, title, artist)

완성본

 

 

 

 

15위 부분에서 19금 공백 확인
19금 아이콘떄문에 저렇게 표시 되는거 같음

for music in musics:
        rank = music.select_one('td.number').text[0:2].strip()
        title = music.select_one('td.info > a.title.ellipsis').text.strip()
        artist = music.select_one('td.info > a.artist.ellipsis').text
        if rank == "15":
            title = title.replace("\n", "");
            title = title.replace("  ", "");

        print(rank, title, artist)

"\n"은 줄바꿈을 ""로 바꿔서 제거해주고 그 아래 부분은 공백을 ""으로 변환해 제거

공백 제거 완료

 

 

DB 종류

큰 기업은 보통 SQL / 스타트업기업이나 데이터 이동 삭제 변경이 자주 되는곳은 NOSQL

 

 

 

DB 연결하기

 

데이터베이스에 접속할 ID/PW

 

 

2가지 패키지 설치 // pymongo, dnspython
connect 누른 후 밑줄&nbsp; 클릭
사용할 드라이버 버전 선택
dbprac 파일 생성

 

복사 후
URL 입력

 

<password> 지우고 DB접속 패스워드 입력 net/ 뒤에 Cluster0 입력 ( 다른게 입력 되있다면 지우고 )
Cluster0 입력한건 이거임

 

DB 데이터 넣기

doc= {
    'name':'bob',
    'age':27
}

db.users.insert_one(doc)

users 컬렉션 안에 데이터가 잘 담긴 모습 // DB연결 확인

 

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.hxjcjic.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta


db.users.insert_one({'name':'boby','age':27})
db.users.insert_one({'name':'john','age':20})
db.users.insert_one({'name':'ann','age':20})

이런식으로도 db에 데이터 입력 가능
보통 이렇게 사용 많이 함

 

 

 

DB (모든 값), (특정 값)검색하기

_id 값은 mongo db에서 자동으로 띄워주는거 밑에 처럼 삭제한 후 사용

 

all_users = list(db.users.find({},{'_id':False}))

for user in all_users:
    print(user)

보통 이걸로 복사해서 많이 사용됨

 

user = db.users.find_one({'name':'bobby'})
print(user)

하나만 찾고 싶을때 사용

user = db.users.find_one({'name':'bobby'})
print(user['age'])

나이만 찾고 싶을때 사용

 

 

DB 데이터 수정하기

 

db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

조건 -> 어떻게 바꿔라 

REFRESH 후 age가 19로 바뀐 모습

 

 

DB 데이터 삭제하기 ( 거의 사용 안함 )

 

db.users.delete_one({'name':'bobby'})

REFRESH 후 bobby가 삭제 된 모습

 

Pymongo DB 코드 요약

# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})

# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
all_users = list(db.users.find({},{'_id':False}))

# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

# 지우기 - 예시
db.users.delete_one({'name':'bobby'})

 

 

 

insert 연습하기 - 웹스크래핑 결과를 DB에 저장하기

import requests
from bs4 import BeautifulSoup

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.hxjcjic.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta


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('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')


movies = soup.select('#old_content > table > tbody > tr')



for movie in movies:
    a = movie.select_one('td.title > div > a')


    if a is not None:
        title = a.text
        rank = movie.select_one('td:nth-child(1) > img')['alt']
        star = movie.select_one('td.point').text
        doc = {
            'title':title,
            'rank':rank,
            'star':star,
        }
        db.movies.insert_one(doc)

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.hxjcjic.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta

DB 연결

 

doc = {
    'title':title,
    'rank':rank,
    'star':star,
}
db.movies.insert_one(doc)

dbprac에 insert(저장)예시 참고해서 해당 값 입력 // 마지막 줄 users에 저장말고 새로운 movies 저장

movies에 데이터들이 저장된 모습

 

 

 

웹스크래핑 결과 이용하기

 

'가버나움'의 평점과 같은 평점의 영화 제목들을 가져오기

 

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.hxjcjic.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta

all_movies = list(db.movies.find({'star':'9.59'},{'_id':False}))
for movie in all_movies:
    print(movie['title'])

나는 이렇게 코드를 작성해봤는데 답이랑은 좀 틀리다. 내가 파악을 잘못한거 같다. 가버나움의 평점을 알고 있을때는 나처럼 코딩해도 되지만 가버나움 평점을 모를때는 밑에 처럼 하는게 맞는거 같다.

 

from pymongo import MongoClient
client = MongoClient('mongodb+srv://test:sparta@cluster0.hxjcjic.mongodb.net/Cluster0?retryWrites=true&w=majority')
db = client.dbsparta

movie = db.movies.find_one({'title':'가버나움'})
star = movie['star']

all_movies = list(db.movies.find({'star':star},{'_id':False}))
for m in all_movies:
    print(m['title'])

 

 

db.movies.update_one({'title':'가버나움'},{'$set':{'star':'0'}})

가버나움 평점을 문자열 '0' 으로 바꾸기 // 그냥 숫자 0 아님

제목을 쉽게 찾을수 있는 라이브러리

 

 

import requests
from bs4 import BeautifulSoup

# 타겟 URL을 읽어서 HTML를 받아오고,
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('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, 'html.parser')

#############################
# (입맛에 맞게 코딩)
#############################

필요할때 url만 교체해서 사용하면 됨

 

 

- Beautifulsoup 사용방법

우클릭 검사
우클릭 copy -> copy selector

import requests
from bs4 import BeautifulSoup

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('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)

soup = BeautifulSoup(data.text, 'html.parser')

title = soup.select_one('#old_content > table > tbody > tr:nth-child(2) > td.title > div > a')
print(title)

title = soup.select_one('  ') 안에 카피한거 붙여넣기

한개만 할때는 select_one

 

실행 누르면 밑에 이렇게 나옴

 

print(title.text)

.text 사용시 밥정만 나옴

 

print(title['href'])

['heef'] 입력시 해당 값만 나옴

 

 

None(가로선) 제거 방법
is not, != 이렇게 쓸수도 있음
.text

 

 

 

rank alt 값 필요 동일하게 copy selector

 

 

star 9.64 값 필요 동일하게 copy selector
여기까진 동일하기 때문에
tr 까지 동일 한 부분 하나만 입력
뒤에 td 부터

 

 

movies = soup.select('#old_content > table > tbody > tr')



for movie in movies:
    a = movie.select_one('td.title > div > a')


    if a is not None:
        title = a.text
        rank = movie.select_one('td:nth-child(1) > img')['alt']
        star = movie.select_one('td.point').text
        print(rank,title,star)

.text , ['alt'] 뒤에다가 입력 해도 해당 값만 출력 가능 프린트에 써도 되긴함

 

 

 

 

+ Recent posts