# json타입 웹 크롤링

# 중요!

# TODO

  • upbit 사이트를 크롤링하여 코인 차트내역을 가져옵니다.

# 크롤링 전 확인해야 할 것

  • 우리가 크롤링 할 사이트가 정해졌다면, 크롤링할 사이트로 들어가 F12를 누르고 network탭을 눌러, 우리가 가져오고자 하는 request url을 찾고, 그 url을 메모합니다.
    이후, 이 request url을 통해 받는 response값의 유형이 json타입 이어야 합니다.
    html타입은 html타입 웹 크롤링을 보시면 됩니다.

# 환경설정

  • python3가 설치된 환경을 가정합니다.

# requests 라이브러리 다운

pip3 install requests

# 코드 작성

  • 크롤링 전 확인해야 할 것 목차에서 메모한 request url을 여기서 사용합니다.
  • 예시에서는 upbit에서 제공한 https://crix-api-cdn.upbit.com/v1/crix/candles/minutes/30을 사용합니다.

# get

import requests

# 자바스크립트 axios와 동일하게, get, post 할 수 있다.
params = {'code': 'CRIX.UPBIT.KRW-BTC', 'count': 2,
          'to': '2020-06-08T10:07:11Z', 'timestamp': 1591610834813}
r = requests.get('https://crix-api-cdn.upbit.com/v1/crix/candles/minutes/30', params=params)

ticket = r.json()
print(ticket)
# [{'code': 'CRIX.UPBIT.KRW-BTC', 'candleDateTime': '2020-06-08T10:00:00+00:00', 'candleDateTimeKst': '2020-06-08T19:00:00+09:00', 'openingPrice': 11673000.0, 'highPrice': 11680000.0, 'lowPrice': 11665000.0, 'tradePrice': 11678000.0, 'candleAccTradeVolume': 18.61184002, 'candleAccTradePrice': 217300580.88941, 'timestamp': 1591610882479, 'unit': 30}, {'code': 'CRIX.UPBIT.KRW-BTC', 'candleDateTime': '2020-06-08T09:30:00+00:00', 'candleDateTimeKst': '2020-06-08T18:30:00+09:00', 'openingPrice': 11655000.0, 'highPrice': 11699000.0, 'lowPrice': 11655000.0, 'tradePrice': 11676000.0, 'candleAccTradeVolume': 61.24624295, 'candleAccTradePrice': 715489513.68521, 'timestamp': 1591610397044, 'unit': 30}]

# 위와 같은 데이터를 가져올 수 있다.
# 이제 목적에 맞게 for, while, if문을 통해 자료를 분리 시키면 됩니다

# 간단하게 찍힌 로그중 highPrice만 가져오는 것을 코딩하면 아래와 같습니다.
for t in ticket:
    print(t['highPrice'])
    print()
#11680000.0
#11699000.0

# POST

data = {'param1': 'value1', 'param2': 'value'}
res = requests.post(URL, data=data)

# pandas를 이용하여 가져온 데이터 저장하기

# pandas 설치

# pandas로 변환되는 과정

  • 리스트, 디셔너리를 데이터 프레임으로 덮어서 저장 -> 읽을땐 데이터프레임을 가져와서 [], {}로 변환
pip3 install pandas

# csv 저장 코드

import requests
import pandas

r = requests.get('URL')


# 아래 처럼 포맷을 잘 맞춰야 csv형식으로 나온다
result = {
    'tradePrice': [],
    'openingPrice': [],
}

tr = r.json()

for tricer in tr:
    result['tradePrice'].append(tricer['tradePrice'])
    result['openingPrice'].append(tricer['openingPrice'])

print(result)

df = pandas.DataFrame(result)

# 파일 저장
df.to_csv('dart.csv')
df.to_excel('dart.xlsx')
df.to_html('dart.html')

# 저장한 csv파일 읽어오기

import pandas

df = pandas.read_csv('test.csv')

print(df[(df['나이'] > 21) | (df['이름'] == '철수')])
Last Updated: 3/24/2021, 8:55:12 PM