8000만 건의 특허 데이터를 수집한 과정

Ariul·2022년 10월 17일
0
post-thumbnail

6주 동안 실전 프로젝트를 진행하면서 학습한 내용을 기록하고, 팀의 리더로서 프로젝트 매니징 경험을 기록하는 시리즈입니다.


요구 사항

  • 레퍼런스 사이트(Kipris)의 특허 데이터 8000만 건 수집하기
  • 국내 특허 데이터 (Total 5,022,553)
  • 해외 특허 데이터 (Total 75,868,149)

크롤링을 어떻게 할 것인가?

1) Jsoup이나BeautifulSoup을 이용해 html 태그에서 원하는 정보를 빼와서 저장하는 방식

⇒ 데이터가 너무 많아서 이러한 방식으로는 시간이 너무 오래 걸릴 것이라 판단하였습니다.

2) Kipris의 온라인 다운로드 기능 사용(1회 최대 다운로드 5000건)

⇒ 다운로드를 할 때 URL로 Payload를 담아서 Post 요청을 하면 xls파일을 반환합니다.

3) 2)를 자동화하는 자바 수집기 개발 ✅


Process

1. 담아야 할 정보들을 Payload에 담아서 Kipris 사이트에게 요청한다.

2. Kipris가 Response로 xls 파일을 보내준다.

Kipris에서 받아온 데이터 ⇒ 불필요한 부분(1행~7행)은 자바의 poi 라이브러리를 이용해 제거

3. 받은 xls 파일을 로그스태시로 엘라스틱서치 서버에 보내기 위해 csv로 변환한다.


트러블 슈팅

문제 상황

csv 데이터를 키바나에 업로드하면 파싱 에러 발생하였습니다.

문제 원인

csv 데이터는 콤마(,)를 구분자로 데이터 항목들을 구분하는데, 받아온 특허 데이터 안에 콤마(,)나 인용문(” “)이 포함되어 있어서 제대로 변환되지 않았습니다.

해결 방안

콤마(,)와 인용문("")을 따로 처리하는 코드를 추가하였습니다.

  • 콤마(,) 처리 코드
 data.append("\""+cell.getStringCellValue()+"\""+",");

⇒ 전체를 “ “ 로 감싸준다.

  • 인용문("") 처리 코드
 data.append("\"").append(cell.getStringCellValue().replaceAll("\"", "\"\"")).append("\",");

“ “”인용문“” “ 처럼 쌍따옴표를 한번 더 감싸주고 전체를 다시 감싸준다.


국내 데이터 수집 방법과 해외 데이터 수집 방법의 차이

국내 데이터 수집 방법

  1. 팀원들(5명)이 각자의 로컬에서 자바 파일을 돌려서 100만 건의 국내 데이터 수집
  2. Filezilla를 이용해 500만 건의 데이터를 EC2로 옮김

⇒ 많은 시간이 소요되고 비효율적인 방법이라 판단하여 해외 데이터는 실제 데이터를 보내는 로그스태시 서버(데이터 파이프라인 서버)에서 수집하였습니다.

해외 데이터 수집 방법

  1. 자바를 실행하는데 필요한 라이브러리 설치
  2. 데이터를 얼마만큼 받을지 숫자 설정 후, 자바 파일을 최대 5개씩 실행
  3. 7,500만 건의 해외 데이터 수집 완료
profile
정성과 진심을 담아 흔적을 기록하자💡

0개의 댓글