Распакуйте csv из URL, который не содержит имени файла, в результате «Файл не является zip-файлом». - PullRequest
0 голосов
/ 23 октября 2019

Я хочу скачать кучу заархивированных 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

Спасибо за ваше терпение и поддержку.

...