[레트로플릭스] 영화진흥회 api , 이미지 크롤링,csv 만들기

seonghyeon·2022년 1월 27일
0

할게 너무많아서 너무 바쁜 하루~?이틀 정도
물론 밤새고 아침에적어서 잘모르겠다 ㅋㅋ
아무튼 이번에 장고로 넷플릭스 클론코딩을 하게되는데 이번 아이디어는
레트로 플릭스 예전에 나온 영화들을 모아서 보여주는 사이트로 했다.

첫째로 어려운것이 90-2000년대 초반 영화들 데이터 모으는것이였는데 다행히
https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do
영화 진흥회 api 가 있었다!
들어가면 상세한 사용법도 잘나와있으니 나중에 필요하면 꼭 사용해보길 바람

아무튼 90~ 07년도까지 각 연도별 100가지 영화를 뽑아서 1700개의 영화를 가져왔다
(100까지밖에 api출력이 안되서 더 많이는 못뽑았다)

그리고 여기서 또 두번째 어려운 부분이 발생했다
포스터가 없었다는거다 .. (이미지도 넣어주시면 고맙겟습니다 영화진흥회)
그렇다고 뭐 없이 뭐 할맛이 나겠는가?
바로 셀레니움으로 포스터 이미지를 크롤링 해왔다.
1700개? 1683~7개 정도 뽑아왔고 굉장히 오래걸렸다 처음쓰는거라서
그리고 나머지는 작업하면서 빈곳있으면 찾아넣어야겟다

import json
import requests
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import urllib.request
from bs4 import BeautifulSoup
import os



movie_list = []
title_list = []
a= 1


for i in range(1990,2007):
	# 영화 진흥회 api에 연도별로 데이터를 뽑기위해 for문을썻다 (100개만출력 제한ㅠ)
    url =f'https://kobis.or.kr/kobisopenapi/webservice/rest/movie/searchMovieList.json?key=f5eef3421c602c6cb7ea224104795888&openStartDt={i}&openEndDt={i}&itemPerPage=100'
    res = requests.get(url)
    text = res.text

    d = json.loads(text)

    for i in d['movieListResult']['movieList']:
    	# 공백란을 제거해줬다
        b = i['movieNm'].replace(' ','')
        # 아래에서 크롤링할떄 용이하게 하기위해서 특수문자는 빼줫다
        title = ''.join(filter(str.isalnum, b))
        genre =i['repGenreNm']
        #연도만 뽑기위해서 슬라이스해줫다
        openDt = i['openDt'][:4]
      	#무비리스트에 더해줬다
        movie_list.append([a,openDt,title,genre])
        #크롤링을위해 제목만 저장한 리스트
        title_list.append(title)
        
        #movie_id 로 사용할 a
        a+=1

# 여기 까지가 영화 데이터를 받아온 부분이고
#타이틀 리스트로 제목만 받아온뒤 셀레니움으로 크롤링해줬다

driver = webdriver.Chrome("chromedriver.exe")
options = webdriver.ChromeOptions()
options.add_argument("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")
driver.get("https://www.google.co.kr/imghp?hl=ko&tab=wi&ogbl" )
for x , i in enumerate(title_list[80:100]):
    vali = os.path.isfile("{i}.jpg")
    #이 부분은 작업도중 혼선이 와서 최대한 시간을 적게 쓰기위한 코드였다
    if vali != True:
    	# 위와 중복인데 처음은 여기만적었는데 아래 저장에서 에러가나서 위에서 아예 다적용한것
        a = ''.join(filter(str.isalnum, i))
        elem = driver.find_element_by_name("q")
        
        #영화 제목 포스터를 입력하고 검색하는 부분
        elem.send_keys(f'영화 {a} 포스터')
        elem.send_keys(Keys.RETURN)
        
	#검색창('q')를 초기화시키는 부분
        driver.find_element_by_name("q").clear()
        
        #여기서부터 내 폴더에 저장하는부분
        driver.find_elements_by_css_selector(".rg_i.Q4LuWd")[0].click()
        imgURL=driver.find_element_by_css_selector(".n3VNCb").get_attribute("src")

        
        urllib.request.urlretrieve(imgURL, f"{i}.jpg")
        #자꾸 봇이라고 뭐라하길래 텀도 추가해줬다
        time.sleep(2)
    
    #자꾸에러나서 열받아서 index 출력해줌 
    print(x)

자꾸 404도 뜨고 뭐 이런저런일이 많이발생해서 힘들긴했지만 결국 다 받아와서 매우 흡족한 부분이 아닐수없다

아 추가로 movie_list로 pandas를 이용해 csv 파일을 만들었다.

import pandas as pd
import numpy as np
import csv
import json
import requests
movie_list = []
a= 1
for i in range(1990,2007):
  
  url =f'https://kobis.or.kr/kobisopenapi/webservice/rest/movie/searchMovieList.json?key=f5eef3421c602c6cb7ea224104795888&openStartDt={i}&openEndDt={i}&itemPerPage=100'
  res = requests.get(url)
  text = res.text

  d = json.loads(text)
  
  
  for i in d['movieListResult']['movieList']:
    title_a = i['movieNm'].replace(' ','')
    title = ''.join(filter(str.isalnum, title_a))
    genre =i['repGenreNm']
    openDt = i['openDt'][:4]
    movie_list.append([a,openDt,title,genre])
    a+=1

movie_data = pd.DataFrame(movie_list, columns= ['movieid','openDt','title','genre'])

movie_data

from google.colab import drive

movie_data

drive.mount('drive')

movie_data.to_csv('movie_data.csv')
!cp movie_data.csv 'drive/My Drive/'

movies = pd.read_csv('movie_data.csv')
movies

기본적이고 귀찮은 일들을 싹 처리한기분이다 남은게 있겠지만 이후에 처리할것들이고

오늘처럼 뜨끈하게 처리할수있기를 바란다

0개의 댓글