본문 바로가기
Python

[KIPRIS] 특허 API 사용법

by 잉나영 2024. 10. 15.
반응형

특허 API 사용 전 신청을 먼저 해줘야 사용이 가능하니 아래를 참고하여 먼저 신청해주시기 바랍니다.

https://lnylnylnylny.tistory.com/45

 

[KIPRIS] 특허청 API 신청법

안녕하세요 오늘은 KIPRIS를 활용한 특허청 API 사용법에 대해 알아보겠습니다! https://plus.kipris.or.kr/portal/main/apiStatus.do?menuNo=210157 KIPRIS Plus plus.kipris.or.kr 위의 KIPRIS Plus를 들어가면 무료로 제공하

lnylnylnylny.tistory.com

 

이제 신청을 완료했다면 사용하는 방법에 대해 설명을 해보겠습니다.

 

https://plus.kipris.or.kr/portal/main/apiStatus.do?menuNo=210157

 

KIPRIS Plus

 

plus.kipris.or.kr

 

 

1. 로그인 후 우측 상단에 있는 마이페이지에 들어간다.

 

 

2. 왼쪽에서 API로 들어가 본인의 API KEY를 확인 후 복사한다.

 

3. 신청 화면에서 예시와 함께 친절히 설명되어있다. 

아래의 입력값 또는 요청 주소를 url에 넣어주고 입력값 데이터를 보고 필요한 부분을 추가해서 넣어주면된다.

 

4. 출력값도 설정해준다.

필요한 내용의 데이터만 받아서 데이터프레임에 넣어주면 된다.

 

5. 예시 코드 

import requests
import pandas as pd
import xml.etree.ElementTree as ET

# API 엔드포인트
url = 'http://plus.kipris.or.kr/openapi/rest/patUtiModInfoSearchSevice/cpcSearchInfo'

# 필요한 데이터를 저장할 리스트
patent_data = []
total_requests = 100  # 요청할 총 페이지 수 (예: 100개를 위해 4페이지 요청)

# 여러 페이지 요청
for page in range(1, total_requests + 1):
    params = {
        'cpcNumber': 'G06N',  # CPC 번호를 설정
        'accessKey': 'API키',  # 실제 API 키 입력
        'pageNo': page,    # 요청할 페이지 번호
        'numOfRows': 30    # 한 페이지에 요청할 데이터 수 (기본 30개)
    }

    # API 요청
    response = requests.get(url, params=params)

    # 응답 확인
    if response.status_code == 200:
        # XML 데이터를 파싱
        root = ET.fromstring(response.content)
        
        # XML에서 각 'PatentUtilityInfo' 태그를 찾음
        for item in root.findall('.//PatentUtilityInfo'):
            application_number = item.find('ApplicationNumber').text if item.find('ApplicationNumber') is not None else 'N/A'
            abstract = item.find('Abstract').text if item.find('Abstract') is not None else 'N/A'
            invention_name = item.find('InventionName').text if item.find('InventionName') is not None else 'N/A'
            registration_number = item.find('RegistrationNumber').text if item.find('RegistrationNumber') is not None else 'N/A'

            # 각 특허 데이터를 딕셔너리로 저장
            patent_data.append({
                'ApplicationNumber': application_number,
                'Registration Number': registration_number,         
                'Invention Name': invention_name,
                'Abstract': abstract,
            })
    else:
        print(f"Failed to fetch data for page {page}: {response.status_code}")

# 리스트를 데이터프레임으로 변환
df = pd.DataFrame(patent_data)

# 데이터프레임 출력
print(df)

# CSV 파일로 저장
df.to_csv("patent_data.csv", index=False, encoding="utf-8-sig")
반응형