프론트엔드 한번하고 방황하고 있었는데 윤아가 김왼손의 파이썬 신병교육대를 보여줬다. 나중에 코테 준비할 때 파이썬 써볼까 하던 참이여서 맛만 보자 하고 시작했다. 슬랙에 들어가려면 문제를 풀어야했는데 파이썬 기본 문법이였다. 그렇지만 나는 한번도 써본적이 없어서 땀 삐질 흘렸다. 그래서 윤아 구박해서 답 얻어냈다. 다음날 유튜브로 빠르게 기본 문법 한번 훑고 시작했다. 여기서 문화 충격을 한번 받았다. 자료형을 표시안해도 된다고..? 땀표를 안쓰네...? 생각하는대로 적으면 되는 이 느낌.... 체감이 바로 되는 very high level language.. 언제할지 모르지만 코테는 파이썬이다 무조건..
파이썬 신병교육대는 교육 방식보다는 자발적으로 프로젝트 하나 끝내는 것이 슬로건 이였다. 그래서 오히려 부담없이 좋았다. 사람들이 말하는 주제를 보니 파이썬으로 할 수 있는게 엄청 많아 보였다. 재밌어 보이는게 많았지만 파이썬은 내 주언어가 될 것은 아니니까 많이 들어봤던 웹 크롤링을 선택했다. 멜론에서 음원순위를 긁어오는 주제로 시작했다. 역시 시작부터 코딩은 내 마음대로 되는게 하나도 없다. 구글링해가면서 열심히 selenium모듈을 설치하려했지만 맥os에선 다 조금씩 달라서 설치하고 가상환경에 들어가는데만 하루를 잡아먹었다. 다음으로 가상환경을 설치해야 했다. 굳이 설치해야하나 생각이 들어서 찾아보니 패키지들의 각 버전마다 호환이 안될수도 있다 하였다. venv를 사용하여 설치한 후 windows는 Scripts를 activate 시킨다. 맥북은 bin을 하면 된다.
그 다음부터는 코드를 작성하면서 엄청난 고난은 없었다. 맛만 본다는 변명으로 코드도 깔끔히 정리하지 않고 써서 언제나와 같이 우당탕탕만들었다. 마지막에 driver.quit()을 작성하지 않고 시작했어서 초반에 테스트로 돌렸을 때 켜졌던 chromedriver가 수십개 켜져있어서 당황했지만 그래도 몇백개가 되기전에 찾아서 잘 마무리했다.
import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
import time
COUNT= 50 #몇위까지?
NEWCOUNT=13
options= webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome('/Users/te___ho/Desktop/teho/py/env/chromedriver',chrome_options=options)
while True:
rank=[]
choice = input('1. Top50 2. 힙합 3. 발라드 4. 팝송 5. 신곡')
if not((choice=='1')or(choice=='2')or(choice=='3')or(choice=='4')or(choice=='5')):
break
if(choice=='1'):
driver.get("https://www.melon.com/chart/index.htm")
for i in range(COUNT):
rank.append(driver.find_element_by_css_selector('tbody > tr:nth-child('+str(i+1)+') > td:nth-child(6) > div > div > div.ellipsis.rank01 > span > a').text + " - " +driver.find_element_by_css_selector('tbody > tr:nth-child('+str(i+1)+') > td:nth-child(6) > div > div > div.ellipsis.rank02 > a').text )
print(' Top 50!')
for i in range(COUNT):
print(str(i+1).rjust(2,' ')+"위 "+rank[i])
elif(choice=='5'):
driver.get('https://www.melon.com/new/album/index.htm')
for i in range(NEWCOUNT):
rank.append(driver.find_element_by_css_selector('#frm > div > ul > li:nth-child('+str(i+1)+') > div.entry > div.info > span.vdo_name').text + ' ' + driver.find_element_by_css_selector('#frm > div > ul > li:nth-child('+str(i+1)+') > div.entry > div.info > a').text + ' - ' + driver.find_element_by_css_selector('#frm > div > ul > li:nth-child(' + str(i+1) + ') > div.entry > div.info > span.ellipsis.artist > a').text)
for i in range(NEWCOUNT):
print(rank[i])
else:
if(choice=='2'):
driver.get('https://www.melon.com/genre/song_list.htm?gnrCode=GN0300#params%5BgnrCode%5D=GN0300¶ms%5BdtlGnrCode%5D=¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=N&po=pageObj&startIndex=1')
elif(choice=='3'):
driver.get('https://www.melon.com/genre/song_list.htm?gnrCode=GN0100&dtlGnrCode=#params%5BgnrCode%5D=GN0100¶ms%5BdtlGnrCode%5D=¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=N&po=pageObj&startIndex=1')
elif(choice=='4'):
driver.get('https://www.melon.com/genre/song_list.htm?gnrCode=GN0900#params%5BgnrCode%5D=GN0900¶ms%5BdtlGnrCode%5D=GN0901¶ms%5BorderBy%5D=POP¶ms%5BsteadyYn%5D=N&po=pageObj&startIndex=1')
for i in range(COUNT):
rank.append(driver.find_element_by_css_selector('form > div > table > tbody > tr:nth-child('+str(i+1)+')> td:nth-child(5) > div > div > div.ellipsis.rank01 > span > a').text + " - " +driver.find_element_by_css_selector('form > div > table > tbody > tr:nth-child('+str(i+1)+')> td:nth-child(5) > div > div > div.ellipsis.rank02 > a').text)
for i in range(COUNT):
print(str(i+1).rjust(2,' ')+"위 "+rank[i])
rank.clear()
driver.quit()
여기서 파이썬은 일단 끝내려했는데 마우스 키보드 제어하는 pyautogui를 발견했다. 데스크탑으로 피파 로그인할 때 소셜 로그인을 해야해서 버튼을 여러번 누르는 것이 귀찮았던참이라 메크로도 빠르게 만들었다. 활용도 1000% 너무 잘쓰고 있다. 말도 안되게 간단하지만 활용도가 너무 좋았다. 앞으로 자동화는 종종 만들어서 사용할것 같다. 프로젝트라고 하기도 뭐하지만 내가 만들걸 유용하게 사용하니 뭔가 한단계 성장한 느낌..★ 재밌었다!
'Algorithm' 카테고리의 다른 글
선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬 (0) | 2023.06.19 |
---|---|
BFS, DFS (너비 우선 탐색, 깊이 우선 탐색) (3) | 2023.06.18 |
[Python] 알고리즘을 위한 문법 복습 - map(), filter(), set() (0) | 2022.08.11 |
[Python] 알고리즘을 위한 문법 복습 - 문자열 & Dictionary & Counter (0) | 2022.08.01 |
[Python] 알고리즘을 위한 문법 복습 - list & enumerate() (0) | 2022.08.01 |