본문 바로가기
기타/파이썬

1. 국가법률정보 API 사용법 - 판례를 크롤링해보자

by 수완동날다람쥐 2021. 2. 27.

1. Intro

법제처에서는 국가법령정보 시스템을 통해 법령/판례 등 법률정보에 누구나 쉽게 접근할 수 있도록 하고 있다. 또한 Open API를 제공해, 편리하게 서비스를 이용할 수 있도록 하고 있다.

셀레니움으로 크롤링하려면 일주일 넘게 걸린다. 그냥 며칠 신청 시간이 걸리더라도, API를 사용하는 것이 정신건강에 이롭다.

 

2. 사용신청

국가법령정보 공동활용 홈페이지 회원가입을 한 후 로그인한다.

 

국가법령정보 공동활용

 

open.law.go.kr

 

로그인 후 OPEN API 사용 신청을 해야 한다. 목록 상단의 신청 버튼을 클릭한다.

 

그럼 다음과 같이 화면이 바뀌게 된다. 신청자 정보, 시스템 정보, 국가법령정보 활용에 관해 자세히 쓸 필요는 없다. 나는 단순 개인 연구용으로 기재했는데, 사용 신청 승인을 받을 수 있었다. 중요한 것은 서버장비의 IP주소인데, 이것만 제대로 작성해주면 된다.

터미널 등 명령 프롬포트에 다음 명령어를 실행시키면 자신의 IP를 쉽게 알 수 있다.

curl ifconfig.me

신청 후 수일 내에 신청 승인 완료 관련 연락이 오면 바로 사용이 가능하다!

 

3. 사용법

국가법령정보 Open API의 사용법은 홈페이지 - 활용가이드에 자세히 나와있다. 여기서는 간단하게 판례 목록을 호출해보자

 

http://www.law.go.kr/DRF/lawSearch.do?OC={아이디}&target=prec&type=XML

위 주소로 들어가면 된다. 아이디는 국가법령정보센터 이메일 아이디에서 도메인을 제외하면 된다.(@ 앞의 아이디) 위 주소로 들어가보면 다음과 같은 페이지가 열린다.

<PrecSearch>
  <target>prec</target>
  <키워드>*</키워드>
  <section>evtNm</section>
  <totalCnt>82054</totalCnt>
  <page>1</page>
  <prec id="1">
    <판례일련번호>212843</판례일련번호>
    <사건명>
    <![CDATA[ 위계공무집행방해·직권남용권리행사방해·허위공문서작성·허위작성공문서행사 ]]>
    </사건명>
    <사건번호>2019도17879</사건번호>
    <선고일자>2020.12.10</선고일자>
    <법원명>대법원</법원명>
    <법원종류코드/>
    <사건종류명>형사</사건종류명>
    <사건종류코드>400102</사건종류코드>
    <판결유형>판결</판결유형>
    <선고>선고</선고>
    <판례상세링크>/DRF/lawService.do?OC={아이디}&target=prec&ID=212843&type=HTML&mobileYn=</판례상세링크>
  </prec>
  <prec id="2">
    <판례일련번호>212839</판례일련번호>
    <사건명>
    <![CDATA[ 대통령기록물관리에관한법률위반·공용전자기록등손상 ]]>
    </사건명>
    <사건번호>2015도19296</사건번호>
    <선고일자>2020.12.10</선고일자>
    <법원명>대법원</법원명>
    <법원종류코드/>
    <사건종류명>형사</사건종류명>
    <사건종류코드>400102</사건종류코드>
    <판결유형>판결</판결유형>
    <선고>선고</선고>
    <판례상세링크>/DRF/lawService.do?OC={아이디}&target=prec&ID=212839&type=HTML&mobileYn=</판례상세링크>
  </prec>
  .
  .
  .
</PrecSearch>

이와 같은 XML 형식의 데이터는 파이썬으로 쉽게 받아올 수 있다.

from bs4 import BeautifulSoup as bs
from urllib.request import urlopen

url = "https://www.law.go.kr/DRF/lawSearch.do?OC={아이디}&target=prec&type=XML"
response = urlopen(url).read()
bs(response)

실행결과

너저분해보이지만 어쨌든 데이터는 정상적으로 수집 가능하다. 다음 포스트에서 판례 데이터들을 제대로 수집해보도록 하겠다.

댓글