In [1]:
from selenium import webdriver

import pandas as pd

In [2]:
# 일반적으로는 driver = webdriver.Firefox() 라 하지만,
# 어차피 변수명이기 때문에 아무거나 해주시면 됩니다.
# 여기서는 "unicorn" 이라고 하겠습니다.

unicorn = webdriver.Firefox()


# 데이터를 저장하기 위한 df 생성
df = pd.DataFrame(columns=["Category", "Course"])

In [3]:
unicorn.get("http://fastcampus.co.kr/course")

In [4]:
# 일단은 이 부분이 확실히 category만을 구분짓는 공통적인 특징인지는 *모르지만*
# 일단 이런 공통적인 특징이 있기 때문에 이렇게 찾아보았습니다.

category_elements = unicorn.find_elements_by_css_selector(
    ".vc_col-sm-12.wpb_column.column_container.height-full"
)

In [5]:
# 여기에서 index 값을 아래서부터 하나씩 찾으면서 제대로 찾은건지 테스트를 해볼거구요
# 크롤링은 노가다 입니다!

category_element = category_elements[2]

category_element.find_element_by_css_selector(
    ".vc_custom_heading"
).text

# 0 => 곧 개강하는 코스들 => 우리가 찾는 값이 X
# 1 => ALL COURSES => 우리가 찾는 값이 X


Out[5]:
'LANGUAGE'

In [6]:
# 위에서 0, 1이 이상한 데이터가 들어감을 알 수 있으므로
# 그냥 잘라내고 8개만 뽑아서 작업을 하겠습니다.

category_elements = category_elements[2:]

In [7]:
len(category_elements)


Out[7]:
8

In [8]:
category_element = category_elements[0]

In [9]:
category_name = category_element.find_element_by_css_selector(".vc_custom_heading").text
category_name


Out[9]:
'LANGUAGE'

In [10]:
course_elements = category_element.find_elements_by_css_selector(".vc_general")

In [11]:
# 이 부분에서도 for문을 돌리시기 전에 어떻게 해야 전체 코스 element 를 찾을 수 있는지
# 테스트 해보시는게 굉장히 중요합니다.

for course_element in course_elements:
    course_name = course_element.text
    print(course_name)


서바이벌 영어 초급 (3/2~)
OFFICE 서바이벌 영어 중급 (3/2~)
TECH 뉴스로 배우는 영어 (3/3~)
MEDIA로 배우는 영어 (3/3~)
FINANCE 뉴스로 배우는 영어 (3/4~)
ENGLISH BOOTCAMP (준비 중)
快速 중국어 초급 (준비 중)
소셜 중국어 중급 (준비 중)
비즈니스 중국어 고급 (준비 중)

In [12]:
# 그리고 만약에 제대로 되었다 싶으실때 복사 => 붙여넣기로 큰 for 문 안에 넣어주시면 됩니다.
# 짜쟌!

for category_element in category_elements:
    category_name = category_element.find_element_by_css_selector(".vc_custom_heading").text
    course_elements = category_element.find_elements_by_css_selector(".vc_general")
    
    for course_element in course_elements:
        course_name = course_element.text
        print((category_name, course_name))
        df.loc[len(df)] = [category_name, course_name]


('LANGUAGE', '서바이벌 영어 초급 (3/2~)')
('LANGUAGE', 'OFFICE 서바이벌 영어 중급 (3/2~)')
('LANGUAGE', 'TECH 뉴스로 배우는 영어 (3/3~)')
('LANGUAGE', 'MEDIA로 배우는 영어 (3/3~)')
('LANGUAGE', 'FINANCE 뉴스로 배우는 영어 (3/4~)')
('LANGUAGE', 'ENGLISH BOOTCAMP (준비 중)')
('LANGUAGE', '快速 중국어 초급 (준비 중)')
('LANGUAGE', '소셜 중국어 중급 (준비 중)')
('LANGUAGE', '비즈니스 중국어 고급 (준비 중)')
('프로그래밍', '프론트엔드 실전 CAMP (3/2~)')
('프로그래밍', '업무자동화를 위한 파이썬 입문 CAMP (3/2~)')
('프로그래밍', '안드로이드 앱 개발 입문 CAMP (3/7~)')
('프로그래밍', '프론트엔드 디자인 CAMP (3/8~)')
('프로그래밍', 'UNITY5 게임 제작 CAMP (3/12~)')
('프로그래밍', '반응형 웹 디자인 CAMP (3/13~)')
('프로그래밍', 'Node.js 로 시작하는 웹 프로그래밍 캠프 (3/30~)')
('프로그래밍', '소프트웨어 테스팅 CLASS (11/17~18)')
('프로그래밍', 'iOS 개발 중급 CAMP (11/25~)')
('프로그래밍', '웹 서비스 개발 CAMP (1/30~)')
('프로그래밍', 'iOS 개발 입문 CAMP (1/31~)')
('프로그래밍', '파이썬으로 시작하는 웹 프로그래밍 CAMP (2/3~)')
('프로그래밍', '프론트엔드 프로그래밍 입문 CAMP (2/17 ~)')
('프로그래밍', '개발자 취업/이직을 위한 알고리즘 CAMP (2/22~)')
('파이낸스', '회계/경리/경영지원 실무역량 강화 CAMP (2/28~)')
('파이낸스', '재무회계 원리 CAMP (2/28~)')
('파이낸스', '금융 데이터 분석을 통한 투자 포트폴리오 만들기 CAMP (3/2~)')
('파이낸스', '재무분석 실전 CAMP (3/3~)')
('파이낸스', '밸류에이션 방법론 & 신사업 타당성 분석 CAMP (3/6~)')
('파이낸스', '금융 데이터 분석 입문 CAMP (11/8~)')
('파이낸스', '재무분석 CAMP (2/1~)')
('파이낸스', '부동산 운용 전략 & 가치평가 CAMP (2/14~)')
('파이낸스', 'Financial Modeling CAMP (2/16~)')
('파이낸스', '금융권 취업/이직을 위한 파이낸스 커리어 완성 CAMP')
('파이낸스', 'Finance 분야 전문가로의 성장을 위한 코스들')
('마케팅', '마케터를 위한 데이터 분석 CAMP (3/3~)')
('마케팅', '모바일 앱 마케팅 & 성과분석 CAMP (3/19~)')
('마케팅', '소셜미디어 콘텐츠 제작 CAMP (3/19~)')
('마케팅', '페이스북 마케팅 CLASS (3/24)')
('마케팅', '모바일 마케팅 CAMP (1/5~)')
('마케팅', '마케팅 전략 분석 CAMP (1/20~)')
('마케팅', '마케터를 위한 글쓰기 CAMP (2/15~)')
('마케팅', '디지털 마케팅 CAMP (2/25~)')
('마케팅', '디지털 마케팅 전문가로의 성장을 위한 코스들')
('비즈니스', '조직을 성장시키는 전략기획 실전 CAMP (3/12~)')
('비즈니스', '외식경영 실전 전략 CAMP (3/19~)')
('비즈니스', '엑셀로 하는 데이터 분석 CAMP (3/24~)')
('비즈니스', '경영전략 CAMP (11/28~)')
('비즈니스', 'FAST MBA CAMP (12/15~)')
('비즈니스', 'M&A 입문 CAMP (1/3~)')
('비즈니스', 'M&A 실전 CAMP (1/31~)')
('비즈니스', '병원 경영&마케팅 WORKSHOP (2/13~14)')
('비즈니스', '내 사업 온라인으로 확장하기 CAMP (2/15~)')
('비즈니스', '스타 MD의 성장공식을 배우는 머천다이징 CAMP (3/6~)')
('크리에이티브', 'BX 디자인 CAMP (3/5~)')
('크리에이티브', 'UX디자인 입문 CLASS (3/12, 3/19)')
('크리에이티브', '디자이너를 위한 포트폴리오 CLASS (3/19~)')
('크리에이티브', '모션 인포그래픽스 CAMP (3/22~)')
('크리에이티브', 'UX디자인 CAMP (9/30~)')
('크리에이티브', '픽토그램 브랜딩 CLASS (10/3, 10, 11)')
('크리에이티브', '모바일 앱디자인 CAMP (2/2~)')
('크리에이티브', '스케치를 활용한 프로토타이핑 CLASS (2/13~)')
('스타트업', '하드웨어 창업 CAMP x N15 (3/13~)')
('스타트업', '쇼핑몰 성공사례 분석 CAMP (3/20~)')
('스타트업', 'O2O 서비스 전략 분석 CAMP (3/22~)')
('스타트업', '스타트업 성장전략 & 문제해결 CAMP (준비 중)')
('스타트업', '스타트업 투자유치 & EXIT 전략 CAMP (1/3~)')
('스타트업', '스타트업 창업 CAMP x MARU180 (1/8~)')
('스타트업', '성장하는 스타트업을 위한 코스들')
('데이터 사이언스', '데이터분석 입문 CAMP (3/12~)')
('데이터 사이언스', '온라인 서비스 적용을 위한 머신러닝 CAMP (3/12~)')
('데이터 사이언스', '머신러닝 입문 CAMP (4/5~)')
('데이터 사이언스', '파이썬을 활용한 데이터분석 CAMP (12/6~)')
('데이터 사이언스', '텍스트마이닝 CAMP (1/14~)')
('데이터 사이언스', '데이터 시각화 CAMP (2/14~)')
('데이터 사이언스', '데이터 분석가로의 성장을 위한 코스들')

In [13]:
df


Out[13]:
Category Course
0 LANGUAGE 서바이벌 영어 초급 (3/2~)
1 LANGUAGE OFFICE 서바이벌 영어 중급 (3/2~)
2 LANGUAGE TECH 뉴스로 배우는 영어 (3/3~)
3 LANGUAGE MEDIA로 배우는 영어 (3/3~)
4 LANGUAGE FINANCE 뉴스로 배우는 영어 (3/4~)
5 LANGUAGE ENGLISH BOOTCAMP (준비 중)
6 LANGUAGE 快速 중국어 초급 (준비 중)
7 LANGUAGE 소셜 중국어 중급 (준비 중)
8 LANGUAGE 비즈니스 중국어 고급 (준비 중)
9 프로그래밍 프론트엔드 실전 CAMP (3/2~)
10 프로그래밍 업무자동화를 위한 파이썬 입문 CAMP (3/2~)
11 프로그래밍 안드로이드 앱 개발 입문 CAMP (3/7~)
12 프로그래밍 프론트엔드 디자인 CAMP (3/8~)
13 프로그래밍 UNITY5 게임 제작 CAMP (3/12~)
14 프로그래밍 반응형 웹 디자인 CAMP (3/13~)
15 프로그래밍 Node.js 로 시작하는 웹 프로그래밍 캠프 (3/30~)
16 프로그래밍 소프트웨어 테스팅 CLASS (11/17~18)
17 프로그래밍 iOS 개발 중급 CAMP (11/25~)
18 프로그래밍 웹 서비스 개발 CAMP (1/30~)
19 프로그래밍 iOS 개발 입문 CAMP (1/31~)
20 프로그래밍 파이썬으로 시작하는 웹 프로그래밍 CAMP (2/3~)
21 프로그래밍 프론트엔드 프로그래밍 입문 CAMP (2/17 ~)
22 프로그래밍 개발자 취업/이직을 위한 알고리즘 CAMP (2/22~)
23 파이낸스 회계/경리/경영지원 실무역량 강화 CAMP (2/28~)
24 파이낸스 재무회계 원리 CAMP (2/28~)
25 파이낸스 금융 데이터 분석을 통한 투자 포트폴리오 만들기 CAMP (3/2~)
26 파이낸스 재무분석 실전 CAMP (3/3~)
27 파이낸스 밸류에이션 방법론 & 신사업 타당성 분석 CAMP (3/6~)
28 파이낸스 금융 데이터 분석 입문 CAMP (11/8~)
29 파이낸스 재무분석 CAMP (2/1~)
... ... ...
45 비즈니스 엑셀로 하는 데이터 분석 CAMP (3/24~)
46 비즈니스 경영전략 CAMP (11/28~)
47 비즈니스 FAST MBA CAMP (12/15~)
48 비즈니스 M&A 입문 CAMP (1/3~)
49 비즈니스 M&A 실전 CAMP (1/31~)
50 비즈니스 병원 경영&마케팅 WORKSHOP (2/13~14)
51 비즈니스 내 사업 온라인으로 확장하기 CAMP (2/15~)
52 비즈니스 스타 MD의 성장공식을 배우는 머천다이징 CAMP (3/6~)
53 크리에이티브 BX 디자인 CAMP (3/5~)
54 크리에이티브 UX디자인 입문 CLASS (3/12, 3/19)
55 크리에이티브 디자이너를 위한 포트폴리오 CLASS (3/19~)
56 크리에이티브 모션 인포그래픽스 CAMP (3/22~)
57 크리에이티브 UX디자인 CAMP (9/30~)
58 크리에이티브 픽토그램 브랜딩 CLASS (10/3, 10, 11)
59 크리에이티브 모바일 앱디자인 CAMP (2/2~)
60 크리에이티브 스케치를 활용한 프로토타이핑 CLASS (2/13~)
61 스타트업 하드웨어 창업 CAMP x N15 (3/13~)
62 스타트업 쇼핑몰 성공사례 분석 CAMP (3/20~)
63 스타트업 O2O 서비스 전략 분석 CAMP (3/22~)
64 스타트업 스타트업 성장전략 & 문제해결 CAMP (준비 중)
65 스타트업 스타트업 투자유치 & EXIT 전략 CAMP (1/3~)
66 스타트업 스타트업 창업 CAMP x MARU180 (1/8~)
67 스타트업 성장하는 스타트업을 위한 코스들
68 데이터 사이언스 데이터분석 입문 CAMP (3/12~)
69 데이터 사이언스 온라인 서비스 적용을 위한 머신러닝 CAMP (3/12~)
70 데이터 사이언스 머신러닝 입문 CAMP (4/5~)
71 데이터 사이언스 파이썬을 활용한 데이터분석 CAMP (12/6~)
72 데이터 사이언스 텍스트마이닝 CAMP (1/14~)
73 데이터 사이언스 데이터 시각화 CAMP (2/14~)
74 데이터 사이언스 데이터 분석가로의 성장을 위한 코스들

75 rows × 2 columns


In [14]:
df.to_csv("fastcampus.csv", index=False)