본문 바로가기
[스파르타 코딩클럽]/비개발자를 위한, 웹개발 종합반

파이썬으로 웹스크래핑 결과 몽고DB에 저장하기

by 수민띠 2023. 2. 26.

네이버 영화페이지 순위, 제목, 평점 크롤링 했던 코드

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

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

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

step1. pymongo 연결 코드 추가 (코드 맨위)

from pymongo import MongoClient
client = MongoClient('몽고DB주소')
db = client.dbsparta

 

step2. 몽고DB에 넣을 값을 딕셔너리로 만들기

doc = {
 'name':name,
 'rank':rank,
 'point':point
}

 

step3. 몽고DB에 값 넣기 ( pymongo라이브러리의 insert_one()사용 )

db.movies.insert_one(doc) #movies라는 새로운 컬렉션에 저장

 

step4.몽고DB 저장 확인

step5. 몽고DB에서 영화 '밥정'의 평점 가져와보기

user = db.movies.find_one({'name':'밥정'})
print(user)
#{'_id': ObjectId('63f7348c2c34e0786a678acc'), 'name': '밥정', 'rank': '01', 'point': '9.64'}
print(user['point']) #9.64

 

step6. DB에서 영화 '가버나움'의 평점과 같은 평점의 영화 제목들 가져와보기

내가 가져온 방법

movies = list(db.movies.find({}))
#가버나움의 포인트를 가져옴
point = db.movies.find_one({'name':'가버나움'})['point']

#반복문 안에서 포인트가 같은 영화 제목을 출력
for movie in movies :
    if movie['point'] == point:
        print(movie['name'])

강의에서 가져온 방법

#영화제목이 가버나움인 것을 가져옴
movie = db.movies.find_one({'name':'가버나움'})
#변수에 가버나움의 point를 저장
target_point = movie['point']
#변수와 같은 값을 가지는 모든 것을 movies에 저장
movies = list(db.movies.find({'point':target_point}))

for a in movies:
    print(a['name'])

 

step7. DB에서 가버나움의 평점 0으로 만들기

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

point에 큰 따옴표 차이 그린북-문자값으로 저장/ 가버나움- 정수값으로 저장 No-SQL의 특징