웹개발 종합반 3주차_16일

ddabong-dochi·2022년 5월 3일
0
post-thumbnail

1. 웹스크래핑 결과 저장하기 (결과를 DB에 저장)

  • 네이버 영화에서 순위, 영화 제목, 평점을 가져와 DB에 저장해 보자.
import requests
from bs4 import BeautifulSoup

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

# 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 = BeautifulSoup(data.text, 'html.parser')

# select를 이용해서, tr들을 불러오기
movies = soup.select('#old_content > table > tbody > tr')

# movies (tr들) 의 반복문을 돌리기
for movie in movies:
    # movie 안에 a 가 있으면,
    a_tag = movie.select_one('td.title > div > a')
    if a_tag is not None:
        rank = movie.select_one('td:nth-child(1) > img')['alt'] # img 태그의 alt 속성값을 가져오기
        title = a_tag.text                                      # a 태그 사이의 텍스트를 가져오기
        star = movie.select_one('td.point').text                # td 태그 사이의 텍스트를 가져오기
        print(rank,title,star)

2. (연습_Quiz) 웹스크래핑 결과 이용하기

(1) 영화제목 '가버나움'의 평점을 가져오기
✍️내가 써 본 코드

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

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

DB에서 pymongo로 찾는건데 논점 파악 못 하고 bs4로 찾고 있었네...🥹

(2) '가버나움'의 평점과 같은 평점의 영화 제목들을 가져오기
✍️내가 써 본 코드

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

all_movies = list(db.movies.find({},{'_id':False}))
gover = db.movies.find_one({'title': '가버나움'})['score']

for movie in all_movies:
   if gover == movie['score']:
       print(movie['title'])

나는 가버나움의 평점을 변수 gover로 지정하고 for 문 안에서 만약 저 평점과 같은게 있으면 title을 찾아내! 이렇게 썼다.
🔥아래는 완성 코드로 제시된 코드

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'])

완성 코드는 내가 해석한 바에 따르면 아예 if문 그런거 없이 가버나움의 평점과 같은 평점을 변수로 아예 지정한 것 같다.

(3) '가버나움' 영화의 평점을 0으로 만들기
✍️내가 써 본 코드

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

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

오 쉽다 이러고 바로 바꿨는데 영상 보니 주의할점! 이러면서 바꿀 부분을 설명해주네;; 저렇게 쓰면 score가 0으로 입력되어서 '숫자'로 입력된다.
❗️그런데 데이터 저장된 거 보면

따옴표 있고 모두 '문자열'로 저장되어져 있다. 그러니까 우리도 문자열로 저장하기!!

짤막 16일차 후기

퇴근하고 공부하다가 중간에 밖에서 밥 먹고 다시 와서 하자니 벌써 10시 30분...이 됐다. 그래도 안 빠뜨리고 하루에 조금씩 공부하다니! 대단해😎...그런데 오늘 퀴즈 영상은 5분짜리인데 나는 한 20~30분 한 듯...분발하자

profile
비전공자 직장인 개발일지😆

0개의 댓글