크롤러 프로토타입 모듈 - Afreeca 크리에이터 데이터 가져오기

prj010

Mon, 18 Nov 2019

크롤러 프로토타입 모듈 - Afreeca API 모듈

  • 우선적으로 크롤러 프로토타입 모듈을 만들어 어떠한 데이터들이 어떻게 받아지는지를 알아야 합니다.
  • 이전 프로젝트 때 아프리카tv와 트위치는 api로 데이터를 받아 왔습니다.
  • 이번에는 리팩토링을 하면서 각각을 OOP에 입각하여 만들겠습니다.

requests HTTPError HTTP Error 404 : Not Found

  • 처음에는 트위치와 동일하게 reuests모듈을 사용하여 데이터를 가져오려고 했다.
import requests

def af_get_data(bjID):
  res = requests.get('http://bjapi.afreecatv.com/api/' + bjID + '/station').json()
  • 아프리카TV API를 사용하면서 twitch 할 당시와는 다르게 에러를 만났다.

아프리카에러

  • 브라우져로 API를 입력하면 가져와졌으나 Python 스크립트로 requests 요청을 보내면 위와 같이 에러 메세지가 나왔다.

아프리카API

  • 처음에는 postman으로 요청을 보내도 안 되어서 요청형식이 잘못된것으로 파악했다. 그래서 url을 open 하고 open한 뒤에 나오는 데이터를 가져와야 하는걸로 생각을 하였다.

포스트맨

  • 그래서 아래와 같은 형식으로 만들어 보았다.
from urllib.request import Request, urlopen
import json


def af_get_data(bjID):
  res = Request('http://bjapi.afreecatv.com/api/' + bjID + '/station')
  res_open = urlopen(res)
  info = json.load(res_open)
  • 그러나 또 오류가 발생하였다.

아프리카에러

200

Afreeca urllib와 requests

from urllib.request import Request, urlopen
import json

def af_get_data(bjID):
  res = Request('http://bjapi.afreecatv.com/api/' + bjID + '/station', headers = {'User-Agent': 'Mozilla/5.0'})
  res_open = urlopen(res)
  info = json.load(res_open)
import requests

def af_get_data(bjID):
  res = requests.get('http://bjapi.afreecatv.com/api/' + bjID + '/station', headers = {'User-Agent': 'Mozilla/5.0'}).json()
  • 둘다 똑같은 결과를 내는 코드이다.

  • 그러나 위는 urllib를 사용하였고 아래는 requests를 사용하였다.

  • requests VS urllib 이 블로그에 따르면

    • 데이터를 보낼때 requests는 딕셔너리 형태, urllib는 인코딩하여 바이너리 형태로 전송
    • requests는 요청메소드(get, post)를 명시하지만 urllib는 데이터의 여부에 따라 get과 post요청을 구분
    • 없는 페이지 요청시 requests는 에러를 띄우지 않지만 urllib는 에러를 띄움

    의 차이가 있었다.

데이터를 가져왔으므로 DB를 만들어야 하나? 아니면 모듈을 제대로 만들고 DB를 만들어야 하나? 어차피 DB를 만들면 DB에 저장하는 모듈도 만들어야 하는데… 아.. youtube 크롤러 모듈을 먼저 만들어보겠다.

Loading...
Upati Sariputa

Upati Sariputa

  • React.js, Node.js, Django
  • 아직 블로그가 완벽하지 않습니다.