본문 바로가기
기타

파이썬으로 URL 파일 다운로드

by 앗사비 2019. 8. 30.
728x90

https://myinbox.tistory.com/111

 

규칙성을 가진 URL에서 다운로드 후 네이밍

$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path $SubDir = $ScriptDir + "\qc" <# 다운로드 경로 비우기 #> New-Item -ItemType Directory -Force -Path $ScriptDir\qc $arsource = @( "https://cd..

myinbox.tistory.com

기존에는 파워쉘로 파일 다운로드 검증을 했는데
아래와 같은 문제가 있었다

* V3에서 바이러스로 오인하여 실행 안됨
* 제품 개수가 늘어나면 ps1 파일 많아짐
* 가끔 다운로드 중 오류 발생하여 배치 실행 종료

그래서 파이썬으로 다시 만들었다
파일 한 개로 관리하고 실행할 때 다운로드 제품을 선택하게 했다

import requests  #다운로드
from win32com.client import Dispatch  # 파일속성
import os
import shutil
import sys #종료함수

def test1():
    folder_name = 'test1'

    url_dict = {
        "test1.EXE": "https://.....EXE", #주소 편집 필요
    }

    return folder_name, url_dict


def test2():
    folder_name = 'test2'

    url_dict = {
        "test2.EXE": "https://.....EXE", #주소 편집 필요
    }

    return folder_name, url_dict
	
	
########## 분기 ###############

print('''
다운로드할 제품을 선택하세요 (범위 벗어나면 종료)

1 : test1
2 : test2

''')

x = input()

if x == '1':
    folder_name, url_dict = test1()
elif x == '2':
    folder_name, url_dict = test2()

else:
    sys.exit()

########### 공통 부분 ###############

for filename, url in url_dict.items():

    # 다운로드

    # 일반적으로 이렇게 쓰면 되지만 대용량 다운로드시 메모리 오류 발생하여 주석 처리
    # r = requests.get(url)
    # with open(filename, 'wb') as f:
    #     f.write(r.content)

	# 대용량 파일 다운로드시 chunk 사용
    # verify : 일부 사이트는 https 유효성 검사 안해야 다운로드 가능
    r = requests.get(url, stream=True,  verify=False)
    with open(filename, "wb") as f:
        for chunk in r.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)

    # 속성에서 버전 정보 가져오기
    ver_parser = Dispatch('Scripting.FileSystemObject')
    version = ver_parser.GetFileVersion(filename)

    # 파일명에 버전 추가
    filename2 = version + '_' + filename

    # 폴더 없으면 새로 생성
    if not os.path.isdir(folder_name):
        os.makedirs(folder_name)

    # 하위 폴더로 이동시키기
    subpath_filename2 = folder_name + '\\' + filename2
    shutil.move(filename, subpath_filename2)

 

728x90

'기타' 카테고리의 다른 글

flow 에서 말일 체크  (0) 2020.04.20
온라인 앱 테스트  (0) 2020.04.08
Postman 으로 api 검증해보기  (0) 2019.05.24
VS Code + GitHub 연동  (0) 2019.02.12
서버 hosts 변경으로 모바일 웹 검증  (0) 2018.09.12