본문 바로가기
PROGRAMMING/Python

[PYTHON] 기업마당_정부 지원 사업 자동화 수집 (크롤링)

by HYUNHP 2022. 4. 10.
728x90
반응형

안녕하세요, HELLO

 

중소벤처기업부는 중소기업, 스타트업, 예비창업자 등을 위한 정부 사업을 '기업마당' 사이트에 통합하여 관리하고 있습니다. 2022년 업데이트를 통해 기존에 제공하던 지원 사업 엑셀(excel)을 더이상 제공하고 있지 않습니다. 스타트업 지원 사업 뉴스레터를 관리하면서, 정보를 원할하게 수집하기 위해 python 크롤링 코드를 작성하여 공유합니다.

 

엑셀로 지원 사업을 관리하는 정부 사업 담당자분들은 확인하시기 바랍니다.


STEP 1. '기업마당' 개념

 

STEP 2. '기업마당' 수집 크롤링 설명


STEP 1. '기업마당' 개념

 

기업마당은 금융, 인력, 경영, 수출 등 중소기업 등을 위한 정책, 지원 사업을 통합하여 안내하고 있습니다.

URLhttps://www.bizinfo.go.kr/web/lay1/bbs/S1T122C128/AS/74/list.do

 

 

서울을 포함하여 전국, 지방 자치 단체 등 지원 사업이 올라오기에, 다양한 정보를 검토하고 관리하기 어렵습니다. 그리고 2022년 업데이트를 통해 지원 목록을 엑셀(excel)로 저장할 수 없기에, 관리가 예전보다 불편해졌습니다.


STEP 2. '기업마당' 수집 크롤링 설명

 

추후에 웹사이트 URL이 변경된다면, link_url과 url_temp의 주소를 변경하시면 됩니다.

 

import pandas as pd
import re
from bs4 import BeautifulSoup
import requests
from tqdm.auto import tqdm
import time
from datetime import date
today = date.today()

import warnings
warnings.filterwarnings('ignore')

# 메인 페이지
def page_crawler():
    link_url = r'https://www.bizinfo.go.kr/web/lay1/bbs/S1T122C128/AS/74/'
    
    for data in soup.find('tbody').find_all('tr'):
        # 지원분야
        cat_temp = data.select('td')[1].text.strip()
        cat_lst.append(cat_temp)

        # 지원사업명
        name_temp = data.select('td')[2].find('a').text.strip()
        name_lst.append(name_temp)

        # 링크
        link_temp = data.select('td')[2].find('a')['href']
        link_temp = link_url + link_temp
        link_lst.append(link_temp)

        #신청기간
        period_temp = data.select('td')[3].text.strip()
        period_lst.append(period_temp)

        # 등록일
        update_temp = data.select('td')[5].text.strip()
        update_lst.append(update_temp)

# 세부 페이지
def target_page_crawler():
    for i in range(len(link_lst)):
        tareget_response = requests.get(link_lst[i])
        target_html = tareget_response.text
        soup = BeautifulSoup(target_html, 'html.parser')

        # 사업개요_신청 자격
        apply_temp = soup.find('div', {'class' : 'view_cont'}).find_all('li')[3].find('div').text.split('☞')[1].strip()
        apply_lst.append(apply_temp)

        # 사업개요_지원 사항
        benefit_temp = soup.find('div', {'class' : 'view_cont'}).find_all('li')[3].find('div').text.split('☞')[2].strip()
        benefit_lst.append(benefit_temp)

url_temp = r'https://www.bizinfo.go.kr/web/lay1/bbs/S1T122C128/AS/74/list.do?rows=15&cpage='
# 실행 횟수 지정
iteration_num = int(input("몇 페이지까지 검토하실건가요?(int): "))

# 지원분야
cat_lst = []
# 지원사업명
name_lst = []
# 링크
link_lst = []
# 신청기간
period_lst = []
# 등록일
update_lst = []
# 사업개요_신청 자격
apply_lst = []
# 사업개요_지원 사항
benefit_lst = []

tik = time.time()

for num in tqdm(range(iteration_num)):
    url_path = url_temp + str(num + 1)
    
    response = requests.get(url_path)
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    time.sleep(1)
    
    # 페이지 크롤링
    page_crawler()

print('main page crawled')

# 메인 페이지 종료 이후, 세부 페이지 크롤링
target_page_crawler()

# 크롤링 종료
print("---{}s seconds done---".format(time.time() - tik))

# dataframe 저장
df = pd.DataFrame({'category': cat_lst,
                   'name' : name_lst,
                   'period' : period_lst,
                   'apply' : apply_lst,
                   'benefit' : benefit_lst,
                   'link' : link_lst,
                   'update' : update_lst})
df.index = df.index+1

df.to_csv('../[기업마당]/' + "스타트업 지원 사업 " + str(today) + ' 검색결과.csv', encoding = 'utf-8-sig')

# dataframe 저장 완료
print('저장 완료')

 

코드를 작업하면 최종적으로 아래처럼 엑셀(excel)로 수집 완료됩니다.

 


■ 마무리

오늘은 '기업마당'의 지원 사업 목록을 자동으로 수집하는 코드를 정리해봤습니다.


좋아요댓글 부탁드리며,

오늘 하루도 즐거운 날 되시길 기도하겠습니다 :)

감사합니다.

반응형

댓글