본문 바로가기
Programming/Python

[Python] 자격증 일정 구글 캘린더 API 연동 프로젝트 (2/4)

by JeeU147 2022. 5. 7.
반응형

안녕하세요.

 

오늘은 파이썬으로 자격증 일정 구글 캘린더 API 연동을 하는 프로젝트를 진행해보려고 합니다.

 

해당 게시글은 2번째 챕터의 글입니다.

 

처음부터 따라하셔야 진행이 됩니다.

 

첫번째 게시글의 링크를 달아놓았으니 참고바랍니다.

2022.05.06 - [프로그래밍/Python] - [Python] 자격증 일정 구글 캘린더 연동 프로젝트 (1/4)

 

[Python] 자격증 일정 구글 캘린더 연동 프로젝트 (1/4)

안녕하세요. 오늘은 파이썬으로 자격증 일정 구글 캘린더 연동을 하는 프로젝트를 진행해보려고 합니다. 준비물 Python 주피터 노트북 2021.10.28 - [프로그래밍/Python] - [Python] 윈도우에서 주피터 노

jeeu147.tistory.com

 

큐넷 자격 정보 크롤링

 

1. 먼저 코드를 한번 흝고 진행해보도록 하겠습니다. 코드는 깃허브에도 있으니 참고 부탁드립니다.

https://github.com/robot147/Qnet_crawling

 

GitHub - robot147/Qnet_crawling

Contribute to robot147/Qnet_crawling development by creating an account on GitHub.

github.com

# 큐넷에 존재하는 모든 자격증 정보(자격명, 자격코드)를 얻어옵니다.
# 캘린더 입력에 필요한 jmCd(코드) 값을 얻어오기 위함입니다.

from bs4 import BeautifulSoup
from urllib.request import urlopen
from selenium import webdriver

import json

dic = {}
list = []

# 국가자격 종목별 상세정보가 존재하는 URL
URL = 'https://www.q-net.or.kr/crf005.do?id=crf00501&gSite=Q&gId='

# 크롬 드라이버 사용
driver = webdriver.Chrome('chromedriver.exe')

# 크롬 실행
driver.get(url=URL)

# 한국산업인력공단 시행종목 큰 카테고리가 총 26개이기 때문에 01~26을 검색 (해당 페이지 jmListInfo 자바스크립트 참조)
for idx in range(1, 27):
    response = urlopen('https://www.q-net.or.kr/crf005.do?id=crf00501s01&gSite=Q&gId=&div=1&obligFldCd=' + str(format(idx, '02')))
    soup = BeautifulSoup(response, 'html.parser')
    
    # 큰 카테고리 내부에 있는 a 태그를 갖고 있는 작은 카테고리 리스트 정보를 얻어옴
    for data in soup.select("a"):
        list.append(data['href'].split(":")[1])

# 작은 카테고리 내부에 있는 자격증 정보를 for문을 돌려서 자격증 별로 자격명과 자격코드를 추출
for scriptData in list:
    driver.execute_script(scriptData)

    ulList = driver.find_elements_by_css_selector("#searchJMlist_view li input")

    for index in range(1, len(ulList), 2):
        dic[ulList[index].get_attribute("value")] = ulList[index-1].get_attribute("value")

# 해당 폴더에 licenselist.json 라는 파일로 추출한 값들을 입력
json_val = json.dumps(dic, ensure_ascii=False)
with open('licenselist.json', 'w', encoding='utf-8') as license:
    license.write(json_val)

# 크롬 닫기
driver.close()

 

2. 큐넷 자격 정보에 대한 정보들을 얻은 곳은 큐넷 모든 자격증 목록에서 얻어왔고 일정관리만 따로 하는 API가 존재하는 것도 확인하여 크롤링을 진행하였습니다.

 

모든 자격증 목록 : https://www.q-net.or.kr/crf005.do?id=crf00501&gSite=Q&gId=

 

국가기술자격 목록 - 국가자격 종목별 상세정보 | Q-net

 

www.q-net.or.kr

정보처리기사 시험 일정 : https://www.q-net.or.kr/crf005.do?id=crf00503s02&gSite=Q&gId=&jmCd=1320

 

https://www.q-net.or.kr/crf005.do?id=crf00503s02&gSite=Q&gId=&jmCd=1320

2022년 정기 기사 1회 2022.01.24 ~ 2022.01.27 2022.03.05 2022.03.23 2022.04.04~2022.04.07 2022.05.07~2022.05.25 2022.06.17

www.q-net.or.kr

3. 해당 API를 확인한 방법은 자격증을 조회할 때 API 호출을 하는 것이 있는지 확인하여 체크했습니다.

자격 일정 API 확인

4. 해당 API를 확인해보았을 때 맨 뒷자리 "jmCd"가 변경되는걸 확인할 수 있었습니다. "Cd = 코드"라는 생각이 들어서 큐넷 사이트 어딘가에서 해당 코드값이 있지 않을까 생각하던 중 모든 자격증 목록 페이지를 찾았습니다. 해당 페이지에서 Code, Name을 발견하여 크롤링을 진행하였습니다.

 

5. licenselist.json 파일에는 아래와 같이 dic(key, value)형태로 되어 있습니다.

- 이후에는 key값으로 value(code)값을 가져와서 일정을 검색하게 됩니다.

licenselist.json

코드값을 구해놓은 파일(licenselist.json)도 프로젝트와 같은 위치에 위치 시켜놓습니다.

 

해당 챕터에서는 큐넷 자격 데이터에 대한 크롤링을 진행하였습니다.

 

다음 챕터에서는 구글 캘린더와 연동하여 일정을 추가 하는 방법에 대해 알아보도록 하겠습니다.

 

감사합니다.

반응형

댓글