본문 바로가기
개발(Develop)/데이터베이스(DB)

데이터베이스(DB)/ 파이썬으로 네이버 영화순위 크롤링한 데이터를 DB에 넣기/ 몽고DB에 데이터 삽입하기(insert)

by 왁왁s 2021. 6. 2.
크롤링한 데이터들을 데이터베이스에 수집해보기

 

이전에 우리가 '네이버 영화 순위 사이트'를 크롤링을 해본 적이 있는데,

이번에는 크롤링을 해서 그냥 출력해보는 것이 아니라

가져온 데이터를 '데이터베이스'에 삽입하는 것을 해보자.

 

이전 '네이버 영화 순위 사이트 크롤링'을 해보지 않았던 분들은 

아래를 참고한다. ▼

네이버 영화 순위 크롤링, 웹스크래핑 해보기/ 파이썬 bs4 패키지 사용법/ 네이버 API 크롤링하기

 

파이썬(Python)/ 네이버 영화 순위 크롤링, 웹스크래핑 해보기/ 파이썬 bs4 패키지 사용법/ 네이버 AP

한 번쯤은 들어봤을 법한 '크롤링'에 대해서 알아봄과 동시에 직접 해보는 것을 이번 글에서 다뤄보겠다. 크롤링(Crawling)이란? 네이버에 크롤링을 검색하면 IT용어사전에 나와 있는 정의이다. 또

parkjh7764.tistory.com


자 그럼 위의 글을 참고하여 이전에 작성했던 

파이썬을 이용한 네이버 영화 순위 크롤링 코드를 활용해보자.

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.nhn?sel=pnt&date=20200303',headers=headers)

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

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


for movie in movies:
    movie_name = movie.select_one("td.title > div > a")
    if movie_name is not None:
        movie_ranking = movie.select_one("td:nth-child(1) > img")["alt"]
        movie_title = movie_name.text
        movie_point = movie.select_one("td.point").text
        print(movie_ranking, movie_title, movie_point)

위에 링크를 걸어둔 글과 코드가 조금 다를 것이다.

이는 조금 번거롭긴 하지만 movie_ranking과 movie_title, movie_point 변수를 따로 두어서

데이터베이스에 넣을 때 더 편리하게 하기 위함이다. 

 

변수를 선언해 .text를 미리 해준다.


그리고 바로 이전 글에서 다룬

파이썬 pymongo 라이브러리를 이용한 mongoDB 다루기 코드를 활용한다.

관련 코드는 아래 글을 참고해서 필요한 코드만 가져와서 사용해보자.

데이터베이스(DB)/ 파이썬(Python)으로 몽고DB 조작하기/ pymongo 라이브러리로 데이터베이스 조작하기/

 

데이터베이스(DB)/ 파이썬(Python)으로 몽고DB 조작하기/ pymongo 라이브러리로 데이터베이스 조작하

데이터베이스 mongoDB(몽고DB)를 파이썬으로 조작하기 파이썬으로 몽고DB를 다루기 위해서는 'pymongo' 라는 파이썬 패키지를 설치해주어야 한다. 만약 파이썬 코드를 작성하는 IDE '파이참(Pycharm)'이

parkjh7764.tistory.com

 


자 그러면 이제 네이버 영화 순위를 크롤링한 것을 데이터베이스에 삽입하는 것을 해보자.

데이터베이스에 삽입하는 코드는 pymongo 라이브러리에서 insert 명령어를 사용하면 된다.

이전 글에서 insert_one 명령어 코드를 사용했던 것을 참고하자.

doc 변수를 선언해 데이터베이스에 넣을 도큐먼트(document)를 구성을 하였다.

 

이번에도 마찬가지로 딕셔너리 형태의 도큐먼트를 선언해주자. 

딕셔너리 형태의 도큐먼트 선언
for movie in movies:
    movie_name = movie.select_one("td.title > div > a")
    if movie_name is not None:
        movie_ranking = movie.select_one("td:nth-child(1) > img")["alt"]
        movie_title = movie_name.text
        movie_point = movie.select_one("td.point").text

        put_data = {
            'ranking': movie_ranking
            'title': movie_title,
            'point': movie_point
        }

put_data라는 이름의 딕셔너리를 생성해준다.

키(key) 값으로는 title, point, ranking을 두었고 

키 값에 맞게 값(value)들이 들어갈 것이다.

 

그리고 도큐먼트를 데이터베이스에 넣어야 하는데, 

이전 글에서 다룬 insert_one 코드에서 가지고 와보자.

db.users.insert_one(doc)

그런데 여기서, users 부분은 '컬렉션'을 의미한다.

현재 넣고자 하는 데이터는 영화에 관련된 데이터이므로

영화와 관련된 컬렉션에 넣어준다. 생성된 컬렉션이 없으니 

적어주기만 하면 자동 생성된다.

그리고 넣을 데이터는 put_data이므로 doc 부분도 바꿔줘야 한다.

 

그리고 그 전에 pymongo 라이브러리를 사용하기 위해서

코드 위에 라이브러리를 import 해줘야 합니다. 이전 글에서 가져오겠습니다.

from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbhwanE

완성 코드

그러면 코드를 모두 작성하게 되면 아래와 같다.

import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client.dbhwanE

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.nhn?sel=pnt&date=20200303',headers=headers)

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

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


for movie in movies:
    movie_name = movie.select_one("td.title > div > a")
    if movie_name is not None:
        movie_ranking = movie.select_one("td:nth-child(1) > img")["alt"]
        movie_title = movie_name.text
        movie_point = movie.select_one("td.point").text

        put_data = {
            'ranking': movie_ranking,
            'title': movie_title,
            'point': movie_point
        }
        db.movies.insert_one(put_data)

 

실행을 해보자. insert 명령이기 때문에 결과 창에는 아무런 결과가 나오지 않을 것이다.

 

mongoDB에 잘 insert가 되었는지 보기 위해 Robo 3T를 켜준다.

 

Robo 3T를 보게 되면 dbhwanE라는 이름의 데이터베이스가 

생긴 것을 확인할 수 있고 이를 클릭한다.

그러면 컬렉션(Collections)이 나오는데,

이전 글에서 생성했던 users 부분과

이번에 새롭게 생성한 movies 컬렉션을 확인할 수 있다.

movies 컬렉션에 들어가게 되면

ranking, title, point라는 키 값으로 

네이버 영화 순위 사이트에서 가지고 온 데이터들이

정상적으로 들어갔음을 확인할 수 있다.

댓글