메뉴 건너뛰기

프로그래밍


네이버 Open API를 이용해서 네이버 영화 정보를 얻어오는 방법입니다.

헌데, Open API를 호출한 결과에는 기자 및 평론가의 평점이 포함되어 있지 않습니다.

이에, Open API를 통해 얻은 영화 정보중 고유 ID를 이용해서 해당 영화의 기자 및 평론가 평점을 크롤링해 오는 방법도 포함하였습니다.


# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import urllib.request
from urllib.parse import quote
import json
import re
import requests

#네이버 검색 Open API 사용 요청시 얻게되는 정보를 입력합니다
naver_client_id = "<naver client id>"
naver_client_secret = "<naver secret>"

def cleanhtml(raw_html):
  cleanr = re.compile('<.*?>')
  cleantext = re.sub(cleanr, '', raw_html)
  return cleantext

def searchByTitle(title):
    myurl = 'https://openapi.naver.com/v1/search/movie.json?display=100&query=' + quote(title)
    request = urllib.request.Request(myurl)
    request.add_header("X-Naver-Client-Id",naver_client_id)
    request.add_header("X-Naver-Client-Secret",naver_client_secret)
    response = urllib.request.urlopen(request)
    rescode = response.getcode()
    if(rescode==200):
        response_body = response.read()
        d = json.loads(response_body.decode('utf-8'))
        if (len(d['items']) > 0):
            return d['items']
        else:
            return None

    else:
        print("Error Code:" + rescode)

def findItemByInput(items):
    for index, item in enumerate(items):
        navertitle = cleanhtml(item['title'])
        naversubtitle = cleanhtml(item['subtitle'])
        naverpubdate = cleanhtml(item['pubDate'])
        naveractor = cleanhtml(item['actor'])
        naverlink = cleanhtml(item['link'])
        naveruserScore = cleanhtml(item['userRating'])

        navertitle1 = navertitle.replace(" ","")
        navertitle1 = navertitle1.replace("-", ",")
        navertitle1 = navertitle1.replace(":", ",")

        #기자 평론가 평점을 얻어 옵니다
        spScore = getSpecialScore(naverlink)

        #네이버가 다루는 영화 고유 ID를 얻어 옵니다다
        naverid = re.split("code=", naverlink)[1]

        # 영화의 타이틀 이미지를 표시합니다
        # if (item['image'] != None and "http" in item['image']):
        #    response = requests.get(item['image'])
        #    img = Image.open(BytesIO(response.content))
        #    img.show()

        print(index, navertitle, naversubtitle, naveruserScore, spScore)

def getInfoFromNaver(searchTitle):
    items = searchByTitle(searchTitle)

    if (items != None):
        findItemByInput(items)
    else:
        print("No result")

def get_soup(url):
    source_code = requests.get(url)
    plain_text = source_code.text
    soup = BeautifulSoup(plain_text, 'lxml')
    return soup

#기자 평론가 평점을 얻어 옵니다
def getSpecialScore(URL):
    soup = get_soup(URL)
    scorearea = soup.find_all('div', "spc_score_area")
    newsoup = BeautifulSoup(str(scorearea), 'lxml')
    score = newsoup.find_all('em')
    if (score and len(score) > 5):
        scoreis = score[1].text + score[2].text + score[3].text + score[4].text
        return float(scoreis)
    else:
        return 0.0

getInfoFromNaver(u"미션")




번호 제목 글쓴이 날짜 조회 수
공지 [TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... [22] 파이팅건맨 2016.02.20 58003
공지 [TIP] TensorFlow를 윈도우에서 사용하기 (A way to use TensorFlow on Windows) [3] 파이팅건맨 2016.04.16 8914
공지 [TIP] JQuery와 PHP로 이미지 파일을 업로드 하는 간단한 소스 (How to upload image file on PHP server by using JQuery) 파이팅건맨 2015.04.03 8614
143 [TIP] 자바스크립트와 PHP코드간에 암호화 통신하기 (Encrypt with Javascript, Decrypt with PHP) [2] 파이팅건맨 2017.03.16 2768
142 [TIP] GUNMAN의 영화 점수 테이블을 이용한 딥러닝 예제 파이팅건맨 2017.02.15 741
141 [TIP] R에서 페이스북 페이지 정보 크롤링 하기 [6] 파이팅건맨 2017.02.11 5749
» [TIP] 네이버 영화 정보와 전문가 평점 얻어오기 파이팅건맨 2017.02.10 4427
139 [TIP] 네이버 오픈 API를 로컬 PC에서 호출하기 파이팅건맨 2017.02.01 2034
138 [TIP] php로 기상청에서 제공하는 기상정보 API 호출하기 파이팅건맨 2017.01.17 5857
137 [TIP] node 에서 Basic authentication 인증과 함께 http, https 요청하기 파이팅건맨 2016.09.01 833
136 [TIP] node의 lambda-local 테스트 팁 파이팅건맨 2016.08.19 677
135 [TIP] 데이터를 Node에서 암호화하고 PHP에서 복호화 하기 파이팅건맨 2016.08.19 627
134 [TIP] Docker상의 Syntaxnet 결과 포맷을 수정하기 파이팅건맨 2016.08.07 1556
133 [TIP] SyntaxNet을 Windows에서 실행하기 [1] 파이팅건맨 2016.05.25 854
132 [TIP] TensorFlow를 윈도우에서 사용하기 (A way to use TensorFlow on Windows) [3] 파이팅건맨 2016.04.16 8914
131 [TIP] 파이선으로 TED에서 가장많이 사용된 단어들 줄세우기 파이팅건맨 2016.04.03 1340
130 [TIP] 파이선에서 구글 스프레드시트 사용하기 [5] 파이팅건맨 2016.03.27 4258
129 [TIP] 파이선에서 리스트를 사용하는 재미있는 예제 파이팅건맨 2016.03.15 656
128 [TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... [22] 파이팅건맨 2016.02.20 58003
127 [TIP] 퍼포먼스를 높여주는 몇가지 코딩 예 파이팅건맨 2016.01.22 496
126 [TIP] JQuery와 PHP로 이미지 파일을 업로드 하는 간단한 소스 (How to upload image file on PHP server by using JQuery) 파이팅건맨 2015.04.03 8614
125 [TIP] 자작 커널을 위한 인터럽트 벡터 수정 (EZ-2410보드 대상) 파이팅건맨 2013.05.04 621
124 위치추적 [1] 우람사랑 2013.04.06 466
위로