Giter Site home page Giter Site logo

naver-movie-crawler's Introduction

naver-movie-crawler

네이버 영화 정보 및 사용자 평점 수집기

  1. 영화 정보 수집(movie collection)
  • 관객 많은순, 랭킹 높은순, 평점 높은순 등 특정 영화군 데이터 수집
  • 약 1000개의 영화 데이터 수집
  • <영화키, 영화제목 등 영화주요정보>
    • 영화주요정보 : 영화세부페이지안에 개요, 러닝타임, 개봉일, 감독, 출연진, 등급(국내/해외)
  • 영화평점을 업데이트 시켜주기위해서 마지막평점남긴사람번호를 기록함.
  1. 영화 평점 수집(score_movie key collection)
  • (1)에서 수집된 영화들을 기준으로 해당 영화 내부의 유저들의 평점을 수집함
  • 영화의 총 평점 갯수가 얼마인지 체크함. (모든 평점을 다 가져올때 데이터가 얼마나 될까? 서버부하는 괜찮을까?)
  • 처음에는 100개만 가져오는걸로 limit parameter 활용함
  • (중복된 평점이 들어가지않게 방지 할방법 생각) => 영화 평점에 번호가 있음. 해당 번호를 기준으로 큰것만 삽입하게함.
  • <유저키, 별점, 영화평, 날짜>
  1. 유저 기준 평점 수집(user_user key collection)
  • (2)에서 수집된 영화 평점을 남긴 유저키를 기준으로 유저들에 대한 평점 정보를 수집함
  • 해당 유저키의 collection이 있는지 조회함. collection이 없다면 user key의 collection 생성, 있으면 continue (앞으로 유저들이 계속 평을 남길거니까 모든 유저의 컬렉션 만듬)
  • (유저도 중복 평점이 발생할수있어서, 해당 유저가 마지막으로 남긴 번호보다 큰값만 삽입해야함) => movie collection 처럼 user collection도 필요한가? 아는정보가 없을텐데...
  • <영화키, 영화제목, 별점, 영화평, 날짜>
  • 사용자가 1111, 1112, 1144, 6666, 7876 를 추천했다면, movie_1111 영화 컬렉션에 평점을 5점을 한사람들을 리스트로 모두 만듬 movie_1112, movie_1144 .. movie_7876 컬렉션에 차례로 5점씩 한사람들의 아이디를 리스트로 만듬 유저키 딕셔너리에 아이디가 나온별로 카운팅해서, 가장 높게 나오는 유저들의 5점 추천 영화를 pick함 ==================================================== 20.11.25 DB구축에 대한 고민중 전체 영화 정보 => movie DB, movie_total 컬렉션안에 모든 영화정보 영화에 평점 전체 => movie DB, movie_124124123 컬렉션 영화별로 등록되있는 모든 평점정보

???유저에 영화 평점 전체??? => 유저키값이 없음. 영화 평점 쌓을때, 만약에 평점을 10점을 매긴사람이라면 해당 유저꺼 따라가서 내가 A라고 임의의 키값을 준다? => 유저를 찾을수 있는 리스트로만 되어있는 단일 컬렉션을 만든다? user_total => A영화에 5점을 매긴 1000을 찾으면 리스트에서 1000을 찾고, 그러면 1000이 추천한 영화가 어떤건진에 대한 연결고리가 필요함. => 1000이 등록한 평점 인덱스가(1000, 1001, 1005, 2000, 3000) 있다고 해도, 1001, 1005 하나씩 다 조회해봐야함. => 연결리스트 구조로 하는건 어떨까?? key는 인덱스로 하고, 해당 인덱스의 영화키값, 영화제목, 평점, 리뷰, 날짜, 직전리뷰인덱스 [주의] 5개 pick한 영화를 모두가 교집합되는 유저가 없을수도있고 5점이 아닐수도있기때문에 가장 높은 유사도의 사람을 찾아야함,

[추가] 알바생들? 이런거 찾아서 블랙리스트 만들어서 평점 구할때 배제해야함

  • 사용자가 1111, 1112, 1144, 6666, 7876 를 추천했다면, movie_1111 영화 컬렉션에 평점을 5점을 한사람들을 리스트로 모두 만듬 ....
    ==================================================== 20.12.01 유저키값이 없어서 DB구축에 대한 설계 => A영화에 10점을 한사람이 B영화에 10점을 했다지만 평점 키값이 다르기때문에, 키값만 가지고 교집합으로 할수없다.

=> (method 1) 유저가 평점을 남기는것에 대한 전체 데이터가 키값은 인덱스만 따로있고, 필드하나에는 list 형태로 자기가 남긴 모든 평점키값을 넣는다? => 각 영화별로 높은 평점을 남긴사람끼리 교집합은 어떻게 할것인가? => A영화에 평점이 있는 유저키값을 하나씩 user_total에서 하나씩 찾아본다 (이게 문제가 n번돌아야함....) => 내가 pick한 A영화 평점 한 유저키 리스트, B영화 평점 한 유저키 리스트, C영화... 총 5개의 리스트를 만들고, 평점이 높은순서대로 정렬한다 => 첫번째 리스트를 기준으로 항목을 하나씩 서칭해서 유저토탈을 뒤진다. 유저토탈에서 평점리스트....???

=> (method 2) 유저키에 대한 정보를 닉네임 ex) abc** 로 가져간다? 적어도 A,B영화 모두 키값이 동일하다. 하지만 정확도가 떨어진다. 한 영화에 같은 키값이 2개가 있을수있다. => A영화에서 같은 키가나오면 [abc***_1] [abc***2] 두개로 구분해서 넣을수도있다. 하지만 두번째 영화에서 abc****이 나온다면 1인지 2인지 확인할수 어렵다

=> (method 3) review_total을 만들때 특정 유저가 평가한 모든 영화의 키값을 저장한다면? => { {movie_key : [1123, 1241, 1233, 4144, 4414,,,,]}, { review_key : [aaaa, bbbb, abac, accc,,,] } 형태에서, 내가 pick한 모든 영화 키값을 가지고 있는 사람만 찾으면됨. => 이 방법은 A영화에 평점을 매긴 사람들을 첫번째 기준으로 user_total을 만들어야함. A영화에 평점을 한 유저를 하나씩 찾으면서, 해당 유저가 평가한 모든 영화키값 평점키값을 수집함 => A영화 다하고 B영화할때는 B영화의 평점키값을 review_total에서 찾는다. 동일한게 있으면 pass, 동일한게 없다면 해당 평점키값은 기존 유저가 새로 남긴 키값이거나, 새로운 유저임 => 해당 평점키값으로 들어가서 이전 평점키값을 가지고 review_total을 또 찾아봄. 동일한게 있으면 해당 인덱스에 movie_key에 B영화 추가, review_key에 해당 평점키값 추가 하면끝 => 없다면, 또 그 이전 평점키값을 review_total을 찾아봄. 동일한게 있으면 해당 인덱스에 moview_key, review_key 추가 해서 종료. => B영화에 첫번째 리뷰를 남긴 평점키를 가지고 들어가서 나오는 모든 평점키를 하나씩 읽으면서 기존에 등록된게 있는지 확인해야함.

=> 아니면 A영화 셋팅끝나고, B영화 시작할때 평점키값이 review_total에 없다면 해당 moview_key, review_key로 인서트함. 그럼 B영화의 모든 평점키값으로 셋팅할수있음. => A,B review_total은 문제없다? 영화에서 정보 탐색할때 [A->B->C] 영화 순으로 하는데, A영화 리뷰안했고, B영화만 리뷰했으면 새로 만들어짐. 그 이후 A영화를 리뷰했으면 A영화 최근에 리뷰한 키값을 기준으로 새로찾는데 최근등록된 평점키값이 review_total에 있는지 없는지 찾아야함.... => 이게 먼말이냐면 기존에 평점이 있는 유저가 새로 평점을 달면 기존 유저에 달려야하는데, 새로운 평점은 review_total에 없으니까 무조건 새로 만들어짐 [확인] 몽고DB array 필드에 값들이 정렬되게 sort이 가능한가?

naver-movie-crawler's People

Contributors

geongi-im avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.