URL에서 반환 된 Zip 파일 다운로드
웹 브라우저에 제출할 때 zip 파일을 저장하는 대화 상자를 표시하는 URL이있는 경우 Python에서이 zip 파일을 찾아 다운로드하려면 어떻게해야합니까?
사용 urllib2.urlopen
. 반환 값은 read()
전달할 수있는 파일 류 객체입니다 zipfile
.
내가 말할 수있는 한,이를 수행하는 적절한 방법은 다음과 같습니다.
import requests, zipfile, StringIO
r = requests.get(zip_file_url, stream=True)
z = zipfile.ZipFile(StringIO.StringIO(r.content))
z.extractall()
물론 GET이 r.ok
.
Python 3+의 경우 io 모듈로 StringIO 모듈을 하위로 지정하고 StringIO 대신 BytesIO를 사용합니다. 다음 은이 변경 사항을 언급하는 릴리스 노트입니다.
import requests, zipfile, io
r = requests.get(zip_file_url)
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall()
Python 3에서 작업해야 할 작업은 다음과 같습니다.
import zipfile, urllib.request, shutil
url = 'http://www....myzipfile.zip'
file_name = 'myzip.zip'
with urllib.request.urlopen(url) as response, open(file_name, 'wb') as out_file:
shutil.copyfileobj(response, out_file)
with zipfile.ZipFile(file_name) as zf:
zf.extractall()
의 도움으로 이 블로그 게시물 , 난 그냥 작업을 있어요 requests
. 이상한 stream
점은 content
큰 요청 을 호출 할 필요가 없기 때문에 한 번에 모두 처리되어 메모리를 막아야한다는 것입니다. 는 stream
한 번에 한 청크 데이터를 반복하여이를 방지합니다.
url = 'https://www2.census.gov/geo/tiger/GENZ2017/shp/cb_2017_02_tract_500k.zip'
target_path = 'alaska.zip'
response = requests.get(url, stream=True)
handle = open(target_path, "wb")
for chunk in response.iter_content(chunk_size=512):
if chunk: # filter out keep-alive new chunks
handle.write(chunk)
handle.close()
urllib2.urlopen을 사용하거나 우수한 Requests
모듈을 사용하여 urllib2 두통을 피할 수 있습니다.
import requests
results = requests.get('url')
#pass results.content onto secondary processing...
Thanks to @yoavram for the above solution, my url path linked to a zipped folder, and encounter an error of BADZipfile (file is not a zip file), and it was strange if I tried several times it retrieve the url and unzipped it all of sudden so I amend the solution a little bit. using the is_zipfile method as per here
r = requests.get(url, stream =True)
check = zipfile.is_zipfile(io.BytesIO(r.content))
while not check:
r = requests.get(url, stream =True)
check = zipfile.is_zipfile(io.BytesIO(r.content))
else:
z = zipfile.ZipFile(io.BytesIO(r.content))
z.extractall()
I came here searching how to save a .bzip2 file. Let me paste the code for others who might come looking for this.
url = "http://api.mywebsite.com"
filename = "swateek.tar.gz"
response = requests.get(url, headers=headers, auth=('myusername', 'mypassword'), timeout=50)
if response.status_code == 200:
with open(filename, 'wb') as f:
f.write(response.content)
I just wanted to save the file as is.
ReferenceURL : https://stackoverflow.com/questions/9419162/download-returned-zip-file-from-url
'Development Tip' 카테고리의 다른 글
해시 맵에서 키 목록을 반환하는 방법은 무엇입니까? (0) | 2021.01.09 |
---|---|
기존 클래스에서 인터페이스 생성 (0) | 2021.01.09 |
while (1)의 목적; (0) | 2021.01.09 |
How to change Button Title Alignment in Swift? (0) | 2021.01.09 |
그림자를 어떻게 렌더링합니까? (0) | 2021.01.09 |