본문 바로가기
컴퓨터관련

python 이용하여 공공DataPortal 제공서비스 목록 파일로 저장하기(beautifulsoup, selenium 이용)

by 기록이답이다 2019. 2. 27.
반응형

 

python을 이용해서 공공 DataPortal 에서 제공하는 api 및 파일데이터 목록을 가져와 파일로 저장하는것을 만들어 봤습니다.

 

공공DataPortal에 접속해서 3000페이지가 넘는걸 일일이 클릭하기가 힘들어

python 공부도 해볼겸해서 만들어 봤습니다.

 

python에서 사용한 모듈은 BeautifulSoup 과 Selenium 입니다.

import re

from selenium import webdriver
from bs4 import BeautifulSoup


def getHtmlFromScript(script):
    driver.execute_script(script)
    html = driver.page_source
    return html

coptions = webdriver.ChromeOptions()
coptions.add_argument('headless')
coptions.add_argument('window-size=1920x1080')
coptions.add_argument("disable-gpu")
coptions.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36")

driver = webdriver.Chrome('c:\\dev\\chromedriver.exe', options=coptions)

driver.get("https://www.data.go.kr/search/index.do")

// dataType = "DATA" // 파일데이터
dataType = "OPENAPI" // 오픈API

result = open(dataType+"_result.txt", mode="w", encoding="UTF-8")

html = getHtmlFromScript("doIndexSearch('%s')" % dataType)

soup = BeautifulSoup(html, 'html.parser')
items = soup.select("div.data-item")

lastPage = soup.find("ul", attrs={"class":"pagination"})
lastPageNumberScript = list(lastPage.select("a"))[-1].get("href")
lastPageNumber = re.compile("\\d+").search(lastPageNumberScript).group()

for i in range(1, int(lastPageNumber)+1):
    print("=========================== %s Page ===========================" % i, end="\n")
    
    html = getHtmlFromScript("javascript:doPaging(%d)" % i)
    soup = BeautifulSoup(html, 'html.parser')
    items = soup.select("div.data-item")
    
    for item in items:    
        print ( item.select("div.data-title > a")[0].text.strip() )
     #print ("-"*5, item.select("div.data-title").get_text().strip(), "-"*5 )
            
        result.write(item.select("div.data-title > a")[0].text.strip()+"\n")
        result.write(item.select("div.data-desc")[0].text.strip()+"\n")        
        result.write("https://www.data.go.kr%s" % item.select("div.data-title > a")[0]['href'])
        result.write("\n\n")
    
    if i % 10 == 0:
        result.flush()
    
result.close()

 

 

파일이 만들어졌네요

 

 

 

이제 공공DataPortal에서 제공하는 api를 가지고 무엇을 만들어보면 좋을까요???

 

 

DATA_result.txt

OPENAPI_result.txt

 

반응형