메뉴 건너뛰기

프로그래밍


네이버 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"미션")




profile
제목 날짜
[TIP] PYTHON 에서 "UnicodeDecodeError: 'cp949' codec can't decode byte 0xe2 in position 6987: illegal multibyte sequence" 오류 날때... 4 2016.02.20
[TIP] JQuery와 PHP로 이미지 파일을 업로드 하는 간단한 소스 (How to upload image file on PHP server by using JQuery) 2015.04.03
[TIP] R에서 페이스북 페이지 정보 크롤링 하기 2 2017.02.11
홈페이지 주인님 소스에 대한 질문입니다 1 2009.05.12
필요한 모든 파일 합쳐서 하나의 .exe 파일 만들기 2003.08.27
프로세스간 통신을 위한 간단한 팁 2000.08.14
타이머 관련해서 질문 드립니다. 1 2005.10.20
클라이언트에서 서버에 접속시 버전체크후 다운받는루틴 1 2005.10.12
추가질의좀...VESA 확장 바이오스 함수로 화면 전화은 어떻게... 1 2005.06.08
질문]winCE Platformbuilder에관하여 1 2005.05.16
제로보드에 GUNCLIENT 컨트롤 적용하는 방법 2003.12.30
전처리기(Preprocessor) 갖고 놀기 2000.08.03
자작 커널을 위한 인터럽트 벡터 수정 (EZ-2410보드 대상) 2013.05.04
인터넷 익스플로러 툴바(툴밴드) 관련 소스링크 2003.07.23
인터넷 가능한지 알아보기 2004.05.12
위치추적 1 2013.04.06
온라인게임에서 CRC check 차단하는법, 1 2005.12.18
어디에 있는지... 1 2003.07.30
알고리즘 구현...(1) 1999.06.05
시리얼통신관련 질문..(응답속도에 관해..) 1 2006.04.03
시리얼 통신 DCB 셋팅 1 2005.10.05
소스코드에 대한 추가질문입니다^^ 1 2009.05.26
비주얼 C++과 MASM 사용하기 2000.09.07
태그 목록
위로