Я хочу скачать кучу заархивированных CSV. В идеале я хочу извлечь каждый сжатый csv и обработать его пандами без необходимости сохранять файлы на диск. Проблема, с которой я сталкиваюсь, заключается в том, что URL, которые мне нужны для получения zip-файлов, не содержат имени файла .zip, но выглядят следующим образом:
https://api.awrcloud.com/v2/get.php?action=get_visibility&token=mytoken&project=client5Bw%5D&fileName=visibility_api-client-file+%5Bw%5D_2019-09-25-2019-10-23
Что странно, так эточто иногда при обработке всех моих URL я могу обработать файл с помощью функции ниже и распаковать csv. Но большую часть времени я получаю сообщение об ошибке: Файл не является zip-файлом .
Дело в том, что если я скопирую и вставлю URL в свой браузер, я смогу загрузить файл. Я прочитал и реализовал многие связанные с этим темы о потоке стека, связанные с разархивированием в памяти, но пока ни одна из них не помогла.
from dotenv import dotenv_values
import requests
import pandas as pd
import zipfile
from io import BytesIO
def processRankingdata(url):
response = requests.get(url)
# {"response_code":25,"message":"Export in progress. Please come back later"}
if "response_code" not in response:
try:
with zipfile.ZipFile(io.BytesIO(response.content)) as thezip:
for zipinfo in thezip.infolist():
with thezip.open(zipinfo) as thefile:
# yield zipinfo.filename, thefile
df = pd.read_csv(thefile)
except Exception as e:
print ('No Zip file for ' + url)
#print (e)
with open('awr_no_zip_failed_urls.txt', 'a+') as filehandle:
filehandle.write(url + '\n')
else:
Заголовки ответа при доступе к URL-адресу из браузера выглядят следующим образом:
cache-control: private, no-cache, no-store, proxy-revalidate, no-transform
content-description: File Transfer
content-disposition: attachment; filename=client-name-ranking-export-2019-09-25-2019-10-23_csv.zip
content-length: 148893
content-type: application/download
date: Wed, 23 Oct 2019 14:07:18 GMT
pragma: no-cache
server: Apache/2.4.37 (Amazon) PHP/7.0.32
status: 200
vary: User-Agent
x-powered-by: PHP/7.0.32
Спасибо за ваше терпение и поддержку.