고을마을 : 나의 코딩 이야기

[스파르타코딩클럽] 웹개발 종합반 3주차 기록 본문

스파르타코딩클럽 웹개발종합반

[스파르타코딩클럽] 웹개발 종합반 3주차 기록

고을마을 2022. 3. 14. 19:37

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3주차 강의가 시작되었다. 

파이썬, 크롤링, DB에 대해서 배웠다.

 

 

 

  • 3-2 연습 겸 복습 - 스파르타피디아에 OpenAPI붙여보기
$(document).ready(function () {
    listing();
});

function listing() {
    $('#cards-box').empty()
    $.ajax({
        type: "GET",
        url: "http://spartacodingclub.shop/web/api/movie",
        data: {},
        success: function (response) {
            let rows = response['movies']
                for (let i = 0; i < rows.length; i++) {
                    let title = rows[i]['title']
                    let desc = rows[i]['desc']
                    let image = rows[i]['image']
                    let star = rows[i]['star']
                    let comment = rows[i]['comment']

                    let star_image = '⭐'.repeat(star)

                    let temp_html = `<div class="col">
                                        <div class="card">
                                          <img src="${image}" class="card-img-top" alt="...">
                                          <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)
                }
        }
    })
}

 

2주차때 배웠던 ajax 코드를 활용해봤다.
자동 새로고침과 Open API 결과값을 temp_html에 반영해보았다. 

이번 강의에서 .repeat()을 활용해 볼수 있었다.

.repeat()은 문자열을 주어진 횟수만큼 반복해 붙여주는 듯 하다.

잘 기억해두고 나중에 활용할 수 있는 기회가 오길...

 

 

  • 3-3 파이썬 기초공부에서부터 3-8 웹스크래핑(크롤링) 연습까지의 내용

간단히 파이썬 문법을 배우고 

파이썬 인터프리터에서 패키지를 설치하게 되었다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

bs4, requests, pymongo, dnspython만 설치했는데 여러 패키지가 함께 설치됐다!

 

select('') 와 select_one('') 을 통해 크롤링 성공! 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

위와 같은 방법을 통해서 선택자를 복사할수 있었고 select('') 와 select_one('')에 붙여넣을 수 있었다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

위와 같은 내용이 참고자료에 있었는데 강의에서 배운 내용이 아니라 아직 감이 잘 안온다.

나중에 크롤링을 더 깊게 배우게 된다면 활용하게 되려나..?ㅠㅠ

 

 

  • 3-9 DB 개괄에서부터 3-14 웹스크래핑(크롤링) 결과 이용하기까지의 내용

mongoDB 연결법과 조작하는 방법을 배웠다.

# 저장 - 예시
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'})

mongoDB를 데이터를 저장하거나 불러올때 큰 참고자료가 될 듯하다.

 

 

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)

 

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

를 활용해서 mongoDB에 저장해보았다.

 

 

이후 웹스크래핑 결과를 이용해 보는 실습을 했는데 조금 어려웠다.ㅜㅜ

 

1. 가버나움의 평점 가져오기.

    target_movie = db.movies.find_one({'title':'가버나움'})

    print(target_movie['star'])

 

2. 가버나움의 평점과 같은 영화 제목 불러오기

   target_movie = db.movies.find_one({'title':'가버나움'})

   target_star = target_movie['star']

   movies = list(db.movies.find({'star':target_star}))

   for movie in movies:

   print(movie['title'])

 

3. 가버나움 영화 평점을 0으로 만들기

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

 

 

  • 3-15 3주차 끝 & 숙제설명
song= soup.select('#body-content > div.newest-list > div > table > tbody > tr')

for sing in song:
    rank = sing.select_one('td.number').text[0:2].strip()
    title = sing.select_one('td.info > a.title.ellipsis').text.replace("19금","").strip()
    singer = sing.select_one('td.info > a.artist.ellipsis').text
    print(rank,title,singer)

이번 숙제는 지니뮤직 top50을 크롤링하는 것이었다.

랭크 부분에서 앞의 두자리만 나올수있도록 text[0:2]를 넣어주었고, 공백을 없애주기 위해 strip()을 넣어주었다.

저스틴비버의 peaches는 19금 노래라서 19금이 따라붙었는데 

구글 검색 결과 replace("old","new")를 활용하면 새로운 문자열을 반환할 수 있음을 확인할수있었다!

replace("19금","")를 넣어주니 19금이란 글자가 사라졌다.

 

뿌듯하게 3주차 숙제까지 마칠수 있었다!