체크 포인트 03 - Python 크롤링
우선 거래소별 정렬을 하기 위해서 거래소별 코인 종목 리스트가 필요했다. 하지만 업비트를 제외한 국내 거래소에서는 api로 종목을 알수 없는 구조여서 크롤링을 하기로 했다. 몇 가지 문제점은 5초간 blocking하는 거래소들이 많은데, 여기서 크롤링을 실패해서 다른 사이트를 찾아서 해결했다. 또한 동적으로 크롤링을 해야해서 selenium을 사용했는데 배포단계에서 이를 어떻게 할지 모르겠다.
총 4개의 거래소를 크롤링했다. 업비트, 빗썸, 코인원, 코인빗 이렇게 한국어 패치도 했다.
업비트
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
import re
import requests
def do_crawl():
url = "https://api.upbit.com/v1/market/all"
querystring = {"isDetails":"false"}
headers = {"Accept": "application/json"}
response = requests.request("GET", url, headers=headers, params=querystring).json()
# print(response)
result = { }
for item in response:
coin_data = item
# print(coin_data)
coin_korean = coin_data['korean_name']
coin_symbol = coin_data['market'][coin_data['market'].find('-') + 1 : ]
# print(coin_symbol)
result[coin_symbol] = coin_korean
# result.append({ 'coinKorean': coin_korean, 'coinSymbol': coin_symbol })
print("upbit do_crawl 완료")
return result
빗썸
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup
import re
def do_crawl():
req = Request('https://www.bithumb.com/trade/order/BTC_KRW', headers={'User-Agent': 'Mozilla/5.0'})
html = urlopen(req).read()
# # 사이트에 문제가 있으면 함수 종료
# if html.status != 200:
# return
soup = BeautifulSoup(html, "html.parser")
# 정보 -> 이름, 호재 시간, 추가된 시간, 제목, 상세내용
crawl_data = soup.select("span[class = 'coinSymbol sort_coin']")
result = { }
for item in crawl_data:
coin_data = str(item)
# print(coin_data)
coin_korean = coin_data[coin_data.find('data-sorting=') + 14 : coin_data.find('>') - 1]
coin_symbol = coin_data[coin_data.find('">') + 2 : coin_data.find('/')]
result[coin_symbol] = coin_korean
print("bitsum do_crawl 완료")
return result
코인빗
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import json
def do_crawl():
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(options=options, executable_path="./chromedriver")
driver.implicitly_wait(3)
driver.get("https://coinbit.co.kr/")
crawl_data = driver.find_elements_by_class_name('coin-name')
result = { }
for item in crawl_data:
coin_data = str(item.text)
coin_data = " ".join(coin_data.split())
coin_data = coin_data.split(' ')
coin_symbol = coin_data.pop().replace("·","")
coin_symbol = coin_symbol[:coin_symbol.find('/')]
if(len(coin_data) == 1):
result[coin_symbol] = coin_data[0]
else:
result[coin_symbol] = ""
with open('coinbit.json', 'w', encoding='utf-8') as make_file:
json.dump(result, make_file, indent="\t")
def read_json():
with open('coinbit.json', 'r') as f:
json_data = json.load(f)
print("coinbit read_json 완료")
return json_data
# do_crawl()
# read_json()
코인원
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import json
def do_crawl():
options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-logging'])
driver = webdriver.Chrome(options=options, executable_path="./chromedriver")
driver.implicitly_wait(3)
driver.get("https://wisebody.co.kr/coinone")
crawl_data = driver.find_elements_by_class_name('coinName')
result = { }
for item in crawl_data:
coin_data = str(item.text)
coin_data = " ".join(coin_data.split())
coin_data = coin_data.split(' ')
if(len(coin_data) == 2):
result[coin_data[0]] = coin_data[1]
else:
result[coin_data[0]] = ""
with open('coinone.json', 'w', encoding='utf-8') as make_file:
json.dump(result, make_file, indent="\t")
def read_json():
with open('coinone.json', 'r') as f:
json_data = json.load(f)
print("coinone read_json 완료")
return json_data
# do_crawl()
# read_json()
다음할일 배포
'프로젝트 > COHO - 코인 호재 캘린더' 카테고리의 다른 글
[COHO] (React.js, Django) 디자인 수정 antd #2 (0) | 2021.05.23 |
---|---|
[COHO] (React.js) 디자인 수정 antd #1 (0) | 2021.05.20 |
[Android] 코호 - 안드로이드 배포 (0) | 2021.04.29 |
[Django] 코호 - 실시간 코인 호재 캘린더 PROC 12 (0) | 2021.04.09 |
[Django] 코호 - 실시간 코인 호재 캘린더 PROC 11 (0) | 2021.04.02 |