
1️⃣ 목표 요약
웹페이지 HTML 안에는 보통 이런 코드가 있다:
<img src="https://cbu01.alicdn.com/img/ibank/O1CN01HEGyac2MfBg4ni0Y5_!!2215688479854-0-cib.jpg" loading="lazy">
<img src="https://cbu01.alicdn.com/img/ibank/O1CN01BFliMd2MfBg8lP9UH_!!2215688479854-0-cib.jpg">
이처럼 이미지 주소(src 속성) 를 자동으로 뽑아내고,
한 번에 모두 다운로드받고 싶다면 다음 두 단계로 해결할 수 있다.
- HTML에서 URL 자동 추출 (src 경로 수집)
- PowerShell을 이용해 이미지 자동 저장
2️⃣ 단계 1 — HTML에서 <img src="..."> 주소 자동 추출하기
HTML 안에서 이미지 경로는 항상 src="...jpg" 같은 형태로 들어 있다.
가장 간단한 방법은 정규식(regular expression) 을 이용하는 것이다.
윈도우에서도 findstr이나 파이썬, 혹은 VSCode 정규식 검색으로 한 줄에 다 뽑을 수 있다.
예시 (정규식 패턴):
src="(https://[^"]+\.jpg)"
이건 뜻이 이렇게 된다:
- src=" → src 속성의 시작
- (https://[^"]+\.jpg) → https로 시작하고, 따옴표 전까지 모든 문자, 그리고 .jpg로 끝나는 문자열
- " → 닫는 따옴표
VSCode 정규식 검색으로 이걸 찾은 다음 “찾은 결과 복사”하면 이미지 URL들만 깔끔하게 얻을 수 있다.
결과 예시:
https://cbu01.alicdn.com/img/ibank/O1CN01HEGyac2MfBg4ni0Y5_!!2215688479854-0-cib.jpg
https://cbu01.alicdn.com/img/ibank/O1CN01BFliMd2MfBg8lP9UH_!!2215688479854-0-cib.jpg
...
이렇게 추출된 링크들을 urls.txt 파일에 저장하자.
한 줄에 하나씩:
https://example.com/1.jpg
https://example.com/2.jpg
...
3️⃣ 단계 2 — PowerShell로 이미지 자동 다운로드
이제 본격적으로 자동 저장이다.
CMD로 하면 인코딩이 깨지고 이미지가 망가진다.
따라서 PowerShell을 이용해야 한다.
🔹 완성 코드 (bat 파일)
아래 코드를 복사해서 download_images.bat로 저장하자:
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
set "urlfile=urls.txt"
set "outputdir=downloaded_images"
if not exist "%outputdir%" mkdir "%outputdir%"
echo ===============================================
echo 📸 이미지 자동 다운로드를 시작합니다
echo URL 목록: %urlfile%
echo 저장 폴더: %outputdir%
echo ===============================================
powershell -NoProfile -ExecutionPolicy Bypass ^
"$urls = Get-Content '%urlfile%';" ^
"$i = 1;" ^
"foreach ($url in $urls) {" ^
" if (![string]::IsNullOrWhiteSpace($url)) {" ^
" Write-Host ('[' + $i + '] 다운로드 중: ' + $url);" ^
" try {" ^
" Invoke-WebRequest -Uri $url -OutFile ('%outputdir%\' + $i + '.jpg') -ErrorAction Stop;" ^
" Write-Host ('✅ 저장 완료: ' + $i + '.jpg');" ^
" } catch {" ^
" Write-Host ('⚠ 실패: ' + $url) -ForegroundColor Red;" ^
" }" ^
" $i++;" ^
" }" ^
"}"
echo.
echo ✅ 모든 이미지 다운로드 완료!
pause
4️⃣ 코드 설명
🧩 chcp 65001
Windows 기본 인코딩은 cp949 (EUC-KR)이라 한글이 깨진다.
65001은 UTF-8 코드페이지로 변경하는 명령이다.
🧩 setlocal enabledelayedexpansion
CMD에서 변수(!count!)를 루프 안에서 실시간으로 갱신하게 해준다.
이게 없으면 파일 이름이 모두 같아져서 덮어쓴다.
🧩 powershell -NoProfile -ExecutionPolicy Bypass
PowerShell을 CMD 내부에서 호출하는 명령이다.
Bypass는 보안정책 무시(일시적으로만).
이걸 빼면 “스크립트 실행이 차단되었습니다” 오류가 난다.
🧩 Invoke-WebRequest
PowerShell의 내장 HTTP 클라이언트.
이미지를 다운로드할 때 curl보다 훨씬 안정적이다.
바이너리 파일(이미지, zip 등)을 그대로 저장한다.
🧩 try / catch
PowerShell은 예외처리가 된다.
다운로드 실패 시 빨간색으로 실패 URL 표시 후 다음 파일로 넘어간다.
5️⃣ 작동 원리 (PowerShell 언어 구조)
PowerShell은 CMD와 달리 객체 기반(Object-Oriented Shell) 이다.
즉, 다운로드 결과가 단순 문자열이 아니라 .NET 객체로 다뤄진다.
예를 들어:
$response = Invoke-WebRequest -Uri $url
$response.Content
이건 “응답 객체의 내용”을 바로 변수로 읽는 구조다.
그래서 인코딩 깨짐이나 바이너리 오류가 없다.
6️⃣ 실제 동작 예시
===============================================
📸 이미지 자동 다운로드를 시작합니다
URL 목록: urls.txt
저장 폴더: downloaded_images
===============================================
[1] 다운로드 중: https://cbu01.alicdn.com/img/ibank/O1CN01HEGyac2MfBg4ni0Y5_!!2215688479854-0-cib.jpg
✅ 저장 완료: 1.jpg
[2] 다운로드 중: https://cbu01.alicdn.com/img/ibank/O1CN01BFliMd2MfBg8lP9UH_!!2215688479854-0-cib.jpg
✅ 저장 완료: 2.jpg
...
✅ 모든 이미지 다운로드 완료!
이제 폴더에 1.jpg, 2.jpg, 3.jpg … 순서대로 정렬된 이미지가 생긴다.
7️⃣ 확장 팁
- .png, .webp도 가능.
-OutFile ('%outputdir%\' + $i + '.png') 형태로 확장자만 바꾸면 됨. - 대용량 HTML에서 자동 추출은 Python BeautifulSoup으로 하면 더 효율적.
- PowerShell로 직접 HTML 파싱도 가능 (Invoke-WebRequest에 .ParsedHtml 속성 있음).
🔠 단어 정리
- 이미지(圖像)
시각적 정보를 표현한 자료.
영어 image (라틴어 imago: 형상, 모양). - 자동화(自動化, automation)
스스로 움직이게 함.
auto (자기) + movere (움직이다). - 정규식(正規式, Regular Expression)
문자열 패턴을 탐색하기 위한 수학적 표현식.
regula (규칙) + expressio (표현). - 쉘(Shell)
운영체제 명령을 받아들이는 인터페이스.
“껍질”이라는 뜻. UNIX 계열에서 유래. - PowerShell
Power (힘) + Shell (명령 껍질).
마이크로소프트의 .NET 기반 명령 환경. - Invoke-WebRequest
invoke (불러내다, 라틴어 invocare) + request (요청하다, requirere).
즉, “웹 요청을 호출하다”.
🧭 마무리
HTML에서 <img src="">를 뽑고,
그 주소를 순서대로 자동 다운로드하는 작업은
단순히 “이미지 저장”이 아니라, 웹 크롤링과 자동화의 기본기다.
CMD로는 절대 완벽히 안 된다.
PowerShell + UTF-8 + Invoke-WebRequest 조합이
지금 기준으로 가장 안정적이고 범용적인 방법이다.