728x90
반응형
질문 : 요청을 사용하여 이미지를 다운로드하는 방법
requests
모듈을 사용하여 웹에서 이미지를 다운로드하고 저장하려고합니다.
내가 사용한 (작동하는) 코드는 다음과 같습니다.
img = urllib2.urlopen(settings.STATICMAP_URL.format(**data))
with open(path, 'w') as f:
f.write(img.read())
requests
사용하는 새로운 (작동하지 않는) 코드입니다.
r = requests.get(settings.STATICMAP_URL.format(**data))
if r.status_code == 200:
img = r.raw.read()
with open(path, 'w') as f:
f.write(img)
requests
에서 사용할 응답의 어떤 속성에 대해 도와 줄 수 있습니까?
답변
response.raw 파일 객체 를 사용하거나 response.raw
반복 할 수 있습니다.
response.raw
파일 류 객체를 사용하는 것은 기본적으로 압축 된 응답 (GZIP 또는 deflate 사용)을 디코딩하지 않습니다. decode_content
속성을 True
로 설정하여 강제로 압축을 풀 수 있습니다 ( requests
은 디코딩 자체를 제어하기 위해 False
shutil.copyfileobj()
를 사용하여 Python이 데이터를 파일 객체로 스트리밍하도록 할 수 있습니다.
import requests
import shutil
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
응답을 반복하려면 루프를 사용하십시오. 다음과 같이 반복하면이 단계에서 데이터의 압축이 해제됩니다.
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
for chunk in r:
f.write(chunk)
이것은 128 바이트 청크로 데이터를 읽습니다. 다른 청크 크기가 더 잘 작동한다고 생각되면 사용자 정의 청크 크기와 함께 Response.iter_content()
메서드를 사용하십시오.
r = requests.get(settings.STATICMAP_URL.format(**data), stream=True)
if r.status_code == 200:
with open(path, 'wb') as f:
for chunk in r.iter_content(1024):
f.write(chunk)
파이썬이 줄 바꿈을 자동으로 번역하지 않도록하려면 바이너리 모드에서 대상 파일을 열어야합니다. 또한 requests
이 전체 이미지를 먼저 메모리에 다운로드하지 않도록 stream=True
출처 : https://stackoverflow.com/questions/13137817/how-to-download-image-using-requests
728x90
반응형
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python이 이 JSON 데이터를 구문 분석 할 수 없는 이유 (0) | 2021.12.16 |
---|---|
Python 단위 테스트 파일의 위치 (0) | 2021.12.16 |
파이썬의 정적 메서드 (0) | 2021.12.15 |
Python의 stdlib를 사용하여 로컬 IP 주소 찾기 (0) | 2021.12.15 |
일반 Python 목록에 비해 NumPy의 장점 (0) | 2021.12.15 |