Open Skills API 이용해서 세상 모든 직무능력 불러오기(feat. requests, json)
Open Skills 이용해서 세상 모든 직업 불러오기(feat. requests, json) gogetem.tistory.com/110
Open Skills.
A complete and standard data store for canonical and emerging skills, knowledge, abilities, tools, technolgies, and how they relate to jobs. Created by Work Data Initiative. http://www.dataatwork.org
표준 및 새로운 기술, 지식, 능력, 도구, 기술 및 직무와 관련된 방법에 대한 완전하고 표준적인 데이터 저장소입니다.
offset은 pagination을 뜻하고, limit은 한 페이지에 반환할 직무 능력(job skills)의 개수를 뜻합니다.
임의로 offset에는 1을, limit에는 500을 넣어서 try 해보겠습니다.
반환하는 json data의 attribute을 보면, uuid, name, type, description, onet_element_id, normalized_skill_name이 있습니다. (이하 스킬은 직무 능력과 동일한 의미입니다)
uuid: 스킬 고유의 ID
name: 스킬의 이름
type: 스킬의 종류 (tool, hard skill, soft skill, certificate 등등)
description: 스킬 설명
onet_element_id: onet에서 제공하는 스킬 ID
normalized_skill_name: 일반화된 스킬 이름
Response Headers 부분에 x-total-count를 보면 총 페이지가 27086개인 것을 알 수 있습니다. 한 페이지에 최대로 반환할 수 있는 스킬의 개수가 500이니까 27086 * 500이면 13,543,000입니다...
직무 능력의 개수가 정확히 13,543,000개는 아니겠지만, 약 이 정도라고 미리 생각해볼 수 있습니다.
any-api.com/dataatwork_org/dataatwork_org/console/_skills/GET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
# Open Skills Project Web Page
# http://dataatwork.org/data/
# API Project Overview GitHub Page
# https://github.com/workforce-data-initiative/skills-api/wiki/API-Overview
# API Explanation
# http://api.dataatwork.org/v1/spec/
# Open Skills Research
# http://dataatwork.org/data/research/
# Representativeness Analysis
# http://dataatwork.org/data/representativeness/
# https://github.com/workforce-data-initiative/skills-analysis/blob/master/representativeness_analysis/Representativeness%20Analysis.ipynb
# Open Skills Documentation Site
# http://documentation.dataatwork.org/open-skills/
# Import Libraries
import requests
import json
import pandas as pd
import time
import multiprocessing
from openpyxl import Workbook
SKILL_COUNT=27087
def get_all_skills(count):# .csv 포맷 엑셀 파일 작성
print("S T A R T")
file_name = "OpenSkills_AllSkills"+str(count)+".csv"
# 모든 직무 능력 json 데이터에 description이 빈칸이라서 제외
ABC = ["A1", "B1", "C1", "D1", "E1"]
columns = ["uuid", "name", "type", "onet_element_id", "normalized_skill_name"]
write_wb = Workbook()
write_ws = write_wb.active
for (alphabet, col) in zip(ABC, columns):
write_ws[alphabet] = col
for i in range(count, count + 6772, 1):
time.sleep(0.0002)
url = "http://api.dataatwork.org/v1/skills?offset=" + str(i) + "&limit=500"
response= requests.request("GET", url)
res_json = str(response.json())
response = res_json.split("'}, {'")
# &limit을 포함하는 json은 직무능력과 관련된 데이터가 아님
for res in response:
if ("&limit" in res):
pass;
# string slicing
else:
uuid = res[res.find("'uuid':'")+12 : res.find("'name'")-3]
name = res[res.find("'name':")+9 : res.find("'type':")-3]
type_ = res[res.find("'type':")+9 : res.find("'description'")-3]
element_id = res[res.find("'onet_element_id':")+20 : res.find("'normalized_skill_name'")-3]
normalized_skill_name = res[res.find("'normalized_skill_name':")+26 :]
write_ws.append([uuid, name, type_, element_id, normalized_skill_name])
time.sleep(0.001)
if (i % 100==0):
print(count, i) # 100pg 마다 프로그레스 프린트
# 파일 저장
write_wb.save(file_name)
# M A I N
num_list = [0, 6772, 13544, 20316] # 네 개 로 나눠서 진행 (가능하면 8개, 16개, 32개 .. 도 가능)
if __name__ == '__main__':
pool = multiprocessing.Pool(processes=8)
pool.map(get_all_skills, num_list)
pool.close()
pool.join()
|
cs |
이렇게 코드를 작성하고 엑셀파일을 작성하는 것으로 했습니다. json handling 하는 데에 있어서 부족하고 더 좋은 코드가 있을 거라고 믿습니다. 혹시나 잘 아시는 분 있으시다면 댓글로 알려주시면 감사하겠습니다.
Open Skills 이용해서 세상 모든 직업 불러오기(feat. requests, json) gogetem.tistory.com/110
'공부 > 파이썬 Python' 카테고리의 다른 글
피플앤잡 직업정보 크롤링하기! (python, csv, requests) (2) | 2021.02.15 |
---|---|
인디드 모든 구인공고 크롤링하기! (feat. Python, Selenium, BeautifulSoup) (0) | 2021.02.15 |
Open Skills API 이용해서 세상 모든 직업 불러오기(feat. requests, json) (0) | 2021.01.15 |
Skills Engine API 이용해서 모든 직업 불러오기 (feat. requests, json) (0) | 2021.01.14 |
Emsi API 이용해서 직무 능력 불러오기 (feat. requests, json) (0) | 2021.01.14 |
댓글