본문 바로가기
Python/Web Scraping

[Web Scraping] os 모듈과 chunk로 하나의 이미지 저장하기

by 개폰지밥 2022. 10. 18.
반응형

최근에 웹 스크랩핑을 하고 있는데 정말 어렵더라구요!

오늘은 웹 스크랩핑을 이용하여 먼저 하나의 이미지를 받은 후에 여러개의 이미지를 받으려고 합니다.

책은 데이터 분석을 위한 파이썬 철저입문을 참고했습니다 :)

 

# 하나의 이미지 받기(파이썬 로고)

파이썬 로고 가져오기

마우스 오른쪽 → 이미지 주소 복사
결과 : https://www.python.org/static/img/python-logo@2x.png

# requests 라이브러리를 이용해 이미지 파일을 위한 응답 객체 가져오기 -> 200 정상
import requests as req

url_pyt = "https://www.python.org/static/img/python-logo@2x.png"
img_pyt = req.get(url_pyt)
img_pyt

결과 : <Response [200]>

# 운영 체제 명령어 사용을 위한 내장 모듈 OS

* os

- os.path.basename(path) : 파일 이름만 반환
-  os.makedirs(folder) : 폴더 생성
-  os.path.exists(folder) : 기존 폴더 확인
-  os.path.jpin(path1[,path2[,...]]) : 생성 폴더 + 이미지 파일명 합치기

 

먼저 os 모듈인 os.path.basename(path) 이용하여 파일 이름만 반환 해보겠습니다.

# os import
import os
name_img_pyt = os.path.basename(url_pyt) # 파일 이름만 반환
name_img_pyt

결과 : 'python-logo@2x.png'

 

os 모듈을 이용하여 폴더 존재 여부 확인 후 없으면 폴더를 만들어보겠습니다.

# C:\Users\Playdata밑에 img_test 폴더 만들기
folder = 'C:/Users/Playdata/imgtest'

if not os.path.exists(folder):
    os.makedirs(folder)

결과 : C:/Users/Playdata 아래에 imgtest 폴더 생성됨

os.path.join을 이용하여 파일명과 폴더 경로를 합쳐 보겠습니다.

path_img_pyt = os.path.join(folder, name_img_pyt)
path_img_pyt

결과 : 'C:/Users/Playdata/imgtest\\python-logo@2x.png'

파일 저장전에 open('file_name','mode')를 이용하여 열어보기

wb는 write와 binary의 약자입니다.

# open('file_name', 'mode') mode 예시 write binary 모드 -> wb
file_img_pyt = open(path_img_pyt, 'wb')
file_img_pyt

결과 : <_io.BufferedWriter name='C:/Users/Playdata/imgtest\\python-logo@2x.png'>

다음으로는 requests 라이브러리의 iter_content(chunk_size[byte])를 이용하여 다운 받습니다.

chunk_size를 이용하여 다운받는 이유는 한번에 다운받을 때 컴퓨터가 느려지거나 오류가 생길 수도있기 때문에 나눠서 받습니다.

chunk_size = 1000000
for chunk in img_pyt.iter_content(chunk_size):
    file_img_pyt.write(chunk)
file_img_pyt.close()

위의 명령어를 실행하면 지정한 폴더에 지정된 파일이 다운로드 된 것을 확인 할 수 있습니다.

아래와 같이 파이썬 명령어로도 확인할 수 있습니다.

os.listdir(folder)
결과 : ['python-logo@2x.png']

다음에는 웹 스크랩핑을 이용하여 여러 이미지를 내려받도록 하겠습니다.

반응형

댓글