Загружается только 1 КБ файла вместо всего этого в Python - PullRequest
0 голосов
/ 17 февраля 2019

Я пытался использовать urllib, requests и wget.Все три не работают.

Я пытаюсь загрузить файл размером 300 КБ .npz с URL.Когда я загружаю файл с wget.download(), urllib.request.urlretrieve() или с requests, ошибка не выдается .Файл .npz загружается.Тем не менее, этот .npz файл не 300 КБ.Размер файла составляет всего 1 КБ.Кроме того, файл не читается - когда я использую np.load(), появляется ошибка OSError: Failed to interpret file 'x.npz' as a pickle.

Я также уверен, что URL действителен.Когда я загружаю файл из браузера, он правильно читается np.load() и имеет правильный размер файла.

Большое спасибо за помощь.


Изменить 1:

Полный код был запрошен.Это был код:

loadfrom = "http://example.com/dist/x.npz"
savedir = "x.npz"
wget.download(loadfrom, savedir)
data = np.load(savedir)

Я также использовал варианты с urllib:

loadfrom = "http://example.com/dist/x.npz"
savedir = "x.npz"
urllib.request.urlretrieve(loadfrom, savedir)
data = np.load(savedir)

и запросов:

loadfrom = "http://example.com/dist/x.npz"
savedir = "x.npz"
r = requests.get(loadfrom).content
with open("x.npz",'wb') as f:
    f.write(r)
data = np.load(savedir)

Все они дают одинаковый результат, с вышеупомянутыми условиями.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Проблема заключалась в том, что серверу требовался JavaScript для запуска в качестве меры безопасности.Итак, когда я отправляю запрос, все, что я получил, было HTML с «Этот сайт требует Javascript для работы».Я обнаружил, что во время запроса необходимо было передать файл cookie __test.

Этот ответ объясняет его полностью. Это видео также может быть полезным.

0 голосов
/ 17 февраля 2019

Пожалуйста, покажите полный код и точные строки, которые вы используете для загрузки файла.Помните, что вам нужно использовать

r=requests.get("direct_URL_of_your_file.npz").content
        with open("local_file.npz",'wb') as f:
            f.write(r)

Также убедитесь, что URL является прямой ссылкой для загрузки.

...