- Published on
국가법령정보 공동활용 판시 요지 및 내용 크롤링(LAW OPEN API)
- Authors
- Name
- 매크로 마스터
안녕하세요, 매크로마스터입니다.
오늘은 OPEN API를 활용해서 국가법령정보 공동활용 사이트에서 제공하는 판시 요지와 내용을 크롤링하는 방법에 대해 소개해드리겠습니다.
국가법령정보 공동활용 사이트란?
국가법령정보센터에서 제공하는 모든 법 관련 정보를 검색할 수 있습니다. 홈페이지에서도 검색이 가능하지만, API를 사용하면 더 다양한 정보를 가져올 수 있습니다.
하지만 먼저 회원가입과 로그인을 거쳐야만 하기 때문에, 데이터를 수집하고자 하시는 분들은 먼저 아래 주소로 접속하시고 사이트에 회원가입을 진행해 주세요.
검색 오픈 API 사용해보기
여기서는 파이썬을 활용해 오픈 API를 사용해 보겠습니다. 코드 실행을 위해서는 몇 가지 패키지를 설치해야 합니다. 아래 명령어를 통해 설치해주세요.
pip install requests pandas tqdm
그리고 해당 패키지들과 더불어 필요 라이브러리를 import 해주세요.
import time
import xml.etree.ElementTree as ET
import pandas as pd
import requests
from tqdm import tqdm
우리가 해볼 것은 2000년부터 2023년까지 판시요지와 판시내용에 “공무원”이 들어가는 모든 판례를 수집하는 것입니다. 이를 위해서는 먼저 요청을 보낼 API 주소를 만들어야 합니다. 여기서 "아이디"는 회원가입을 통해 발급받은 아이디를 넣어주시면 됩니다.
id = "아이디"
keyword = "공무원"
base_url = (
f"http://www.law.go.kr/DRF/lawSearch.do?OC={id}"
"&target=prec&type=XML" # XML 형식으로
f"&query={keyword}" # "공무원"이 들어가는 판례
"&display=100" # 한 번에 100개씩
"&prncYd20000101~20231231" # 2000년부터 2023년까지
"&search=2" # 판시요지와 판시내용
)
이제 API 주소를 통해 요청을 보내고, 응답을 받아서 XML 형식으로 저장해보겠습니다.
res = requests.get(base_url)
xtree = ET.fromstring(res.text)
totalCnt = int(xtree.find('totalCnt').text)
print(totalCnt)
여기까지 실행해보면 총 검색된 판례 갯수를 알 수 있습니다. 7008개가 검색되네요. API로 한 번에 100개의 판례를 가져올 수 있기 때문에 71번의 요청을 보내야 모든 데이터를 가져올 수 있습니다. 데이터를 row
리스트에 딕셔너리를 하나씩 추가하는 방식으로 추출해 보겠습니다.
rows = []
for page in tqdm(range(1, int(totalCnt // 100) + 2)):
url = f"{base_url}&page={page}"
response = requests.get(url)
xtree = ET.fromstring(response.text) # XML 형식 파싱
try:
items = xtree[5:] # 데이터가 더 이상 없는 경우 처리
except:
break
for node in items:
판례일련번호 = node.find("판례일련번호").text
사건명 = node.find("사건명").text
사건번호 = node.find("사건번호").text
선고일자 = node.find("선고일자").text
법원명 = node.find("법원명").text
사건종류명 = node.find("사건종류명").text
사건종류코드 = node.find("사건종류코드").text
판결유형 = node.find("판결유형").text
선고 = node.find("선고").text
판례상세링크 = node.find("판례상세링크").text
rows.append(
{
"판례일련번호": 판례일련번호,
"사건명": 사건명,
"사건번호": 사건번호,
"선고일자": 선고일자,
"법원명": 법원명,
"사건종류명": 사건종류명,
"사건종류코드": 사건종류코드,
"판결유형": 판결유형,
"선고": 선고,
"판례상세링크": 판례상세링크,
}
)
time.sleep(0.5)
이제 데이터를 DataFrame
으로 변환하고, 확인해보겠습니다.
df = pd.DataFrame(rows)
df.head()
실행 결과
판례일련번호 | 사건명 | 사건번호 | 선고일자 | 법원명 | 사건종류명 | 사건종류코드 | 판결유형 | 선고 | 판례상세링크 |
---|---|---|---|---|---|---|---|---|---|
239923 | 증여세부과처분취소[증여세 세무조사의 적법 여부가 문제된 사건] | 2021두32088 | 2024.03.12 | 대법원 | 세무 | 400108 | 판결 | 선고 | /DRF/lawService.do?OC=&target=pre... |
239935 | 특정범죄가중처벌등에관한법률위반(뇌물)·사기·뇌물공여 | 2023도17394 | 2024.03.12 | 대법원 | 형사 | 400102 | 판결 | 선고 | /DRF/lawService.do?OC=&target=pre... |
239937 | 손해배상(기)[사법경찰관의 체포·구속 등 수사활동이 위법함을 이유로 국가배상을 구하...] | 2020다290569 | 2024.03.12 | 대법원 | 민사 | 400101 | 판결 | 선고 | /DRF/lawService.do?OC=&target=pre... |
239469 | 해임처분취소 | 2022두50571 | 2024.02.08 | 대법원 | 일반행정 | 400107 | 판결 | 선고 | /DRF/lawService.do?OC=&target=pre... |
239981 | 출국명령처분취소 | 2023구단11356 | 2024.01.10 | 대구지방법원 | 일반행정 | 400107 | 판결 : 확정 | 선고 | /DRF/lawService.do?OC=&target=pre... |
마지막으로 결과를 엑셀 파일로 저장해보겠습니다.
df.to_excel("판례.xlsx", index=False)
프로그램 제작 및 구입 문의
오늘은 국가법령정보 공동활용 사이트에서 판시 요지와 내용을 크롤링하는 방법에 대해 알아보았습니다. 만약 프로그램 구입을 원하시거나, 프로그램에 대한 질문이 있으시다면 아래 배너를 클릩하여 오픈카톡으로 문의해주세요.
기존 프로그램 수정, 신규 제작 등 필요하신 작업에 대해서 빠르고 친절하게 안내 도와드리겠습니다.
현금영수증 또는 세금계산서 발행 가능합니다!