GIL's LAB

KIPRIS 특허 데이터 수집 본문

파이썬/업무 자동화

KIPRIS 특허 데이터 수집

GIL~ 2023. 4. 10. 13:24

이번 포스팅에서는 특허정보검색서비스 키프리스에서 API를 통해 특허 데이터를 수집하는 방법에 대해 알아보겠습니다.

 

키프리스 플러스 가입

먼저 키프리스 플러스에 가입합니다. API 키를 받기 위한 부분이므로 반드시 가입해야 합니다.

https://plus.kipris.or.kr/portal/main.do

 

KIPRIS Plus

“ 특허정보 활용의 새로운 패러다임 ” 특허청이 개방중인 산업재산권 정보를 Bulk Data, OPEN API 방식으로 제공하여, 이용자가 새로운 가치를 창출하도록 지원하는 서비스 116 Bulk Data 58 SOAP API 70 RE

plus.kipris.or.kr

 

API 키 확인

키프리스 플러스에 로그인한 뒤, 우측 상단에 마이페이지 > API KEY 관리에 가면 다음과 같이 키를 확인할 수 있습니다.

 

 

서비스 신청

위 API Key는 그대로 활용할 수 없으며 API 데이터를 신청해야 합니다.

데이터 서비스 > 서비스 신청 > Open API에 접속해서 구매할 상품을 고릅니다.

일반적으로는 특허 실용 공개 등록 공보를 가장 많이 사용할 것 같습니다.

구매하고자 하는 상품을 선택하고 아래 장바구니 버튼을 누릅니다.

 

 

그러면 다음과 같이 확인메시지가 뜨는데, 확인을 누릅니다.

그리고나서 장바구니로 이동합니다. 

장바구니에 가면 아까 장바구니에 담았던 특허 실용 공개 등록공보가 있습니다.

해당 부분을 클릭한 뒤, 하단에 서비스 신청정보를 넣어줍니다.

참고로 처음에는 무료로 구매한 뒤에 나중에 더 필요한 경우 유료로 바꾸기를 권장합니다.

또한, 1천건 호출 제한인데 데이터 개수가 1000개가 아님에 주의해야 합니다. 

1천건 호출이면 1회성 분석에 필요한 어지간한 크기의 데이터는 모두 커버할 수 있습니다.

이제 신청한 뒤 API가 활성화될 때까지 기다려줍니다.

무료의 경우에는 2-30분 정도 걸린 듯 합니다.

 

파이썬 코드

이제 특허 데이터를 수집하기 위한 코드를 만들어보겠습니다.

먼저 다음과 같이 관련 모듈을 불러옵니다.

import requests
import xmltodict
import pandas as pd
import time

다음으로 url에서 데이터를 가져오는 함수인 get_reponse 함수와 데이터를 파싱한 함수인 extract_items_from_body 함수를 정의하겠습니다.

def get_response(url):
    while True:
        try:
            reponse = requests.get(url)
            time.sleep(1)
            break
        except:
            time.sleep(60 * 15)    
            
    content = reponse.text
    content = xmltodict.parse(content)['response']
    return content
def extract_items_from_body(content):
    result = []
    for item in content['body']['items']['item']:
        result.append(item.values())
    
    result = pd.DataFrame(result, columns = item.keys())
    return result

이제 수집할 url만 정의하면 됩니다.

서비스별 url 정보는 아래에서 확인할 수 있습니다.

https://plus.kipris.or.kr/portal/data/service/List.do?subTab=SC001&entYn=N&menuNo=200100 

 

KIPRIS Plus

 

plus.kipris.or.kr

이 가운데 저는 특허·실용 공개·등록공보 > REST > 항목별 검색 > 전체검색을 사용하겠습니다.

 

먼저 url 구조를 정의해야 합니다.

쿼리에는 ipc, date_range, pn, api_key를 사용하며, 다음과 같이 정의해주겠습니다.

api_key = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
date_range = '20180101~20221231'
ipc = 'A01B'
pn = 1

 

다음으로 url을 정의해줍니다. 

url = 'http://plus.kipris.or.kr/kipo-api/kipi/patUtiModInfoSearchSevice/getAdvancedSearch?ipcNumber={}&registerDate={}&numOfRows=20&pageNo={}&ServiceKey={}'.format(ipc, date_range, pn, api_key)

여기서 ?전까지가 메인 url이고 뒷 부분이 쿼리라고 보시면 됩니다.

뒷 부분을 잘라서 보면 "변수명=값"을 &로 이은 것을 알 수 있습니다.

저는 ipcNumber, registerDate, numOfRows, pageNo, ServiceKey를 쿼리로 사용했습니다.

 

이제 pn을 1부터 늘려가면서 모든 데이터를 가져오겠습니다.

total_data = pd.DataFrame()
pn = 1
while True:
    try:            
        url = 'http://plus.kipris.or.kr/kipo-api/kipi/patUtiModInfoSearchSevice/getAdvancedSearch?ipcNumber={}&registerDate={}&numOfRows=50&pageNo={}&ServiceKey={}'.format(ipc, date_range, pn, api_key)    
        content = get_response(url)
        result = extract_items_from_body(content)
        total_data = pd.concat([total_data, result], axis = 0, ignore_index = True)    
        print(ipc, pn)
        pn += 1
    except:
        break

total_data에 우리가 수집한 모든 데이터가 담겼으며, for문을 활용하고 다양한 검색 조건을 활용하면 조금 더 편리하게 우리가 원하는 데이터를 수집할 수 있습니다.

 


데이터 분석 서비스가 필요한 분은 아래 링크로! 

https://kmong.com/gig/374194 

 

데이터사이언스 박사의 데이터 분석 서비스 드립니다. | 150000원부터 시작 가능한 총 평점 5점의 I

78개 총 작업 개수 완료한 총 평점 5점인 데이터사이언스박사의 IT·프로그래밍, 데이터 분석·시각화 서비스를 68개의 리뷰와 함께 확인해 보세요. IT·프로그래밍, 데이터 분석·시각화 제공 등 150

kmong.com

 

Comments