본문 바로가기

개발일지

스파르타코딩클럽 내배캠-사전캠프 미니 팀프로젝트-完

https://github.com/sdoram/sprata/tree/main/pre_camp

 

GitHub - sdoram/sprata: 스파르타코딩클럽 내일배움캠프

스파르타코딩클럽 내일배움캠프. Contribute to sdoram/sprata development by creating an account on GitHub.

github.com

처음 생각했던 크롤링은 requests, bs4를 이용하는 것이었는데 정작 결과물을 확인하니 둘 다 빠져버렸다.

완성된 코드를 보며 똑같이 작성했던 pygame과 다르게 selenium으로 크롤링하는 대상이 일반적인 예제와 달라서 막힐 때마다 인터넷을 뒤지며 짜깁기를 하고 있어서 눈치를 채는 게 늦었는데 파이썬 3.6처럼 selenium도 문법이 크게 바뀐 것 같았다. 

 

처음에는 list로 저장하고 for문을 돌린 뒤 한 줄만 떼어내는 등 내가 보기에도 어지러운 코드가 있었는데 불 필요한 코드를 최대한 지워도 진행이 안 돼서 막막할 때 검색을 계속하다가 'innerText'를 찾고 사용하자 막막했던 제목까지 한 번에 해결됐다.

class youtube:     
    def crawling (link): # youtube 크롤링 
        chrome_ver = AutoChrome.get_chrome_version().split('.')[0]
        path = os.path.join(os.getcwd(),chrome_ver)
        path = os.path.join(path,'chromedriver.exe')
        options = webdriver.ChromeOptions()
        options.add_experimental_option("excludeSwitches", ["enable-logging"])
        driver = webdriver.Chrome(options=options)
        driver.get(url=link)

        # time.sleep(5)
        artists = driver.find_elements(By.XPATH, '//*[@id="default-metadata"]/a')

        for artist in artists : # 가수 크롤링
            print(artist.get_attribute('text'))
            return artist.get_attribute('text')

        driver.close()

 

class youtube:     
    def crawling (link): # youtube 크롤링 
        # 경로
        chrome_ver = AutoChrome.get_chrome_version().split('.')[0]
        path = os.path.join(os.getcwd(),chrome_ver)
        path = os.path.join(path,'chromedriver.exe')

        # 옵션
        options = webdriver.ChromeOptions()
        options.add_argument("headless") # 백그라운드 실행
        options.add_experimental_option("excludeSwitches", ["enable-logging"])
        driver = webdriver.Chrome(options=options)

        # 크롤링 링크
        driver.get(url=link)

        # 대기 시간
        driver.implicitly_wait(100) # 최대 100초 대기, 결과 찾으면 종료

        # 크롤링 대상
        music_crawling = driver.find_elements(By.ID, 'default-metadata')[0] # 제목
        artist_crawling = driver.find_elements(By.ID, 'default-metadata')[1] # 가수
        album_crawling = driver.find_elements(By.ID, 'default-metadata')[2] # 앨범

        # 결과 추출
        music = music_crawling.get_attribute('innerText')
        artist = artist_crawling.get_attribute('innerText')
        album = album_crawling.get_attribute('innerText')
        print(music)
        print(artist)
        print(album)
        return music,artist,album,driver.close()

 

원하던 결과물이 출력되고 다 끝난 줄 알았는데 aws환경에서 작동이 안 돼서 찾아보니 서버에서 작동할 수 있도록 추가 작업이 필요한 것을 알게 되었고 아쉽지만 로컬환경에서 작동하는 것으로 마무리했다.

 

하루 남짓한 시간으로 해결가능한 수준인지 파악이 불가능했고 처음 크롤링을 시도한 이유가 관심 있는 기능을 맨땅에 헤딩하며 구현해 보기 위함이었고 로컬환경에서 작동하는 것, 개발이 단순 작동에서 끝나는 게 아니라는 걸 배운 것으로 사전캠프의 경험으로는 충분하다고 생각한다

 

혼자 하는 프로젝트라면 개발지연, 선회, 포기 등 도망갈 수 있지만, 여럿과 함께하는 협업 프로젝트는 자신의 역량이 가능한 부분인지 파악하는 일이 굉장히 중요함을 배웠다.

 

머리 박으면서 배운 것

1. 기본적인 문법과 예제는 해결하고 사용해 보자

2. 라이브러리는 가능하면 최신 정보로 찾아보기

3. 검색 키워드를 잘 입력하자

4. 배포할 경우 배포 환경에서도 정상 작동하는지 확인

5. 내가 구현 가능한지 제대로 파악하기