오늘은 오픈 API에 공개되어 있는 예금자보호 금융상품 조회 서비스 API 와 우체국금융 보험상품정보 조회 서비스 API를 활용해서 시중에서 거래되고 있는 보험 상품 정보들을 스크래핑하는 스크립트를 간단히 소개해드리고자 합니다. 인슈어테크 관련 해커톤에 나갔다가 수상은 못했지만, 여러모로 쓸모있을 거 같아 블로그를 통해 공유합니다.
예금자보호 금융상품 조회 서비스 API 와 우체국금융 보험상품정보 조회 서비스 API를 활용해서 시중 보험 상품 정보 스크래핑
#-*- coding:utf-8 -*
import requests
import json
#update datas from openapi
def getPostProduct():
keyword = ""
productList = []
resultList = []
postProductJson = {"getProductList": ""}
key = "<<set key>>"
url = "http://apis.data.go.kr/1721301/KpostInsuranceProductView/insuranceGoods?serviceKey="+ key +"&GOOD_ABNM=" + keyword
response = requests.get(url)
jsonData = json.loads(response.content.decode(encoding='utf-8'))
groupData = jsonData["response"]["body"]["items"]["item"]
for data in groupData:
resultList.append({"prtName":data["GOOD_ABNM"], "item":data})
postProductJson["getProductList"] = resultList
with open("postProduct.json", 'w', encoding='utf8') as outfile:
json.dump(postProductJson, outfile, ensure_ascii=False)
def getNotCompany():
key = "<<set key>>"
rows = "10000"
type = "json"
pTypeList = ["금융투자", "은행", "저축은행"]
notCompanyList = ["우리종합금융㈜"]
for pType in pTypeList:
url = "http://apis.data.go.kr/B190017/service/GetInsuredProductService/getCompanyList?serviceKey=" + key + "&numOfRows=" + rows + "&resultType=" + type + "®nNm=" + pType
response = requests.get(url)
jsonData = json.loads(response.content.decode(encoding='utf-8'))
groupData = jsonData['getCompanyList']['item']
for data in groupData:
company = data['fncIstNm']
notCompanyList.append(company)
return notCompanyList
def getCompany():
key = "<<set key>>"
rows = "10000"
type = "json"
url = "http://apis.data.go.kr/B190017/service/GetInsuredProductService/getCompanyList?serviceKey=" + key + "&numOfRows=" + rows + "&resultType=" + type
response = requests.get(url)
jsonData = json.loads(response.content.decode(encoding='utf-8'))
groupData = jsonData['getCompanyList']['item']
notCompanyList = getNotCompany()
companyList = []
for data in groupData:
company = data['fncIstNm']
check = str(company in notCompanyList)
if check == "False":
companyList.append(company)
return companyList
def getProduct(company):
key = "<<set key>>"
rows = "10000"
type = "json"
url = "http://apis.data.go.kr/B190017/service/GetInsuredProductService/getProductList?serviceKey=" + key + "&numOfRows=" + rows + "&resultType=" + type + "&fncIstNm=" + company
productList = []
response = requests.get(url)
jsonData = json.loads(response.content.decode(encoding='utf-8'))
groupData = jsonData['getProductList']['item']
for data in groupData:
if data['prdSalDscnDt'] == "":
productList.append(data['prdNm'])
return productList
if __name__ == "__main__":
getPostProduct()
productJson = {"getProductList": ""}
resultList = []
companyList = getCompany()
for company in companyList:
productList = getProduct(company)
result = {"company": company, "item": productList}
resultList.append(result)
productJson["getProductList"] = resultList
with open("product.json", 'w', encoding='utf8') as outfile:
json.dump(productJson, outfile, ensure_ascii=False)
postProduct - 우체국 보험 상품 정보
product - 예금자 보호 금융 상품 중, 증권/은행 상품을 제외한 보험 상품 정보
반응형