ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [4주차]스파르타코딩클럽 웹개발 종합반 3
    카테고리 없음 2022. 10. 24. 17:30

    4-9 [스파르타피디아] -프로젝트 세팅

    본격적으로 들어가기에 앞서 계속 해왔던것처럼 movie 폴더에 static, templeates 폴더를 만들고 

    templeats 폴더에 index.html를 만들고 최상위폴더에 app.py를 만들고 각종 인터프리터들을 설치했다.

     

    4-10 [스파르타피디아] - 조각 기능 구현해보기

    프로젝트 준비- URL에서 페이지 정보 가져오기( meta 태그 스크래핑)

    메타 태그는, <head></head> 부분에 들어가는, 눈으로 보이는 것(body) 외에 사이트의 속성을 설명해주는 태그들이다.

    예) 구글 검색 시 표시 될 설명문, 사이트 제목, 카톡 공유 시 표시 될 이미지 등

    우리는 그 중 og:image / og:title / og:description 을 크롤링 할 예정이다.

    먼저 크롤링 기본 코드를 넣는다.

    import requests
    from bs4 import BeautifulSoup
    
    url = 'https://movie.naver.com/movie/bi/mi/basic.naver?code=191597'
    
    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')
    
    # 여기에 코딩을 해서 meta tag를 먼저 가져와보겠습니다.

    그 다음 meta 태그를 이용하여 제목, 그림 ,설명을 크롤링 한다. 끝!

    title = soup.select_one('meta[property="og:title"]')['content']
    image = soup.select_one('meta[property="og:image"]')['content']
    desc = soup.select_one('meta[property="og:description"]')['content']
    
    print(title,image,desc)

    4-11 [스파르타피디아] - 뼈대 준비하기.

    강의해서 준비 해 준 app.py 코드스니펫 과 index.html 코드스니펫을 클릭하여 붙여넣기했다.

     

    4-12 [스파르타피디아] - POST 연습 (포스팅하기)

    강의로 한번 풀고 그다음 혼자 안보고 연습 해 봤다.

    아직은 설명까지는 할 수 없을것 같아 5장까지 전부 끝낸 후 복습할때 자세하게 알아봐야겠다..ㅠㅠ

    직접 수정 하면서 고쳐 본 것만 올려봅니다.. 

    app.py

    @app.route("/movie", methods=["POST"])
    def movie_post():
        url_receive = request.form['url_give']
        star_receive = request.form['star_give']
        comment_receive = request.form['comment_give']
    
        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_receive, headers=headers)
    
        soup = BeautifulSoup(data.text, 'html.parser')
    
        title = soup.select_one('meta[property="og:title"]')['content']
        image = soup.select_one('meta[property="og:image"]')['content']
        desc = soup.select_one('meta[property="og:description"]')['content']
    
        doc = {
            'title' : title,
            'image' : image,
            'desc' : desc,
            'star' :star_receive,
            'comment' : comment_receive
        }
        db.movies.insert_one(doc)
        return jsonify({'msg': '저장 완료!'})

    index.html

    function posting() {
        let url = $('#url').val()
        let star = $('#star').val()
        let comment = $('#comment').val()
    $.ajax({
    type: 'POST',
    url: '/movie',
    data: {url_give : url, star_give : star , comment_give : comment},
    success: function (response) {
    alert(response['msg'])
        window.location.reload()
    }
    });
    }

    4-13 [스파르타피디아] GET 연습(보여주기)

    1. 서버 만들기

    서버는 받는게 없으므로 order에 주문 정보를 담아서 내려주기

    @app.route("/movie", methods=["GET"])
    def movie_get():
        movie_list = list(db.movies.find({}, {'_id': False}))
        return jsonify({'movies':movie_list})

    2. 클라이언트 만들기

    응답을 잘 받아서 for 문으로 붙여주기

    function listing() {
        $.ajax({
            type: 'GET',
            url: '/movie',
            data: {},
            success: function (response) {
                let rows = response['movies']
                for (let i = 0; i < rows.length; i++) {
                    let comment = rows[i]['comment']
                    let desc = rows[i]['desc']
                    let image = rows[i]['image']
                    let star = rows[i]['star']
                    let title = rows[i]['title']
    
                    let star_image = '⭐'.repeat(star)
    
    
                    let temp_html = `<div class="col">
                    <div class="card h-100">
                    <img src="${image}"
                    class="card-img-top">
                    <div class="card-body">
                    <h5 class="card-title">${title}</h5>
                    <p class="card-text">${desc}</p>
                    <p>${star_image}</p>
                    <p class="mycomment">${comment}</p>
                    </div>
                    </div>
                    </div>`
                    $('#cards-box').append(temp_html)
                }
            }
        })
    }

    완성!

    이제 남은 건 숙제 말곤 없다.

    계속 보고 하다보니 적응은 되는데.. 설명 하기는 힘들다..ㅠㅠ

Designed by Tistory.