최근에 웹 스크랩핑을 하고 있는데 정말 어렵더라구요!
오늘은 웹 스크랩핑을 이용하여 먼저 하나의 이미지를 받은 후에 여러개의 이미지를 받으려고 합니다.
책은 데이터 분석을 위한 파이썬 철저입문을 참고했습니다 :)
# 하나의 이미지 받기(파이썬 로고)
파이썬 로고 가져오기
마우스 오른쪽 → 이미지 주소 복사
결과 : 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']
다음에는 웹 스크랩핑을 이용하여 여러 이미지를 내려받도록 하겠습니다.
'Python > Web Scraping' 카테고리의 다른 글
[Web Scraping] 여러개 이미지 저장하기 (8) | 2022.10.19 |
---|---|
[Web Scraping] 네이버웹툰 - 인기 웹툰 및 제목, 링크, 평점 가져오기 (8) | 2022.10.10 |
[Web Scraping] Naver Webtoon - 요일별 전체 웹툰 제목 가져오기 (0) | 2022.10.09 |
댓글