Как исправить загрузку HTML вместо файла изображения - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь загрузить файл по ссылке, используя urllib в Python 3.7, и он загружает файл HTML, а не файл изображения.

Итак, я пытаюсь получить информацию из формы Google,информация отправляется в Google Sheet.Я могу получить информацию в листе без проблем.Однако форма требует отправки изображения, которое отображается на листе в виде URL.(Пример: https://drive.google.com/open?id=1YCBmEOz6_l7WDQw5t6AYBSb9B5XXKTuX)

Это мой код:

import urllib.request
import random

Затем я создаю функцию загрузки:

def downloader(image_url):
    file_name = random.randrange(1,10000)
    full_file_name = str(file_name) + '.png'
    print(full_file_name)
    urllib.request.urlretrieve(image_url,full_file_name)

Я получаю URL и изолирую идентификаторизображения:

ImgId="https://drive.google.com/open?id=1Mp5XYoyyEfWJryz8ojLbHuZ6V0IzERIV"
ImgId=ImgId[33:]

Затем я помещаю идентификатор в ссылку для скачивания:

ImgId="https://drive.google.com/uc?authuser=0&id="+ImgId+"&export=download"

В результате (в приведенном выше примере) "https://drive.google.com/uc?authuser=0&id=1YCBmEOz6_l7WDQw5t6AYBSb9B5XXKTuX&export=download". Далее Iзапустите функцию загрузки:

downloader(ImgId)

Итак, после этого я ожидал, что файл png будет загружен в папку программы, однако он загрузил html-файл с входа на google-диск * 1024.* страница вместо файла изображения или даже html-файл изображения. Принимая во внимание, что для просмотра или загрузки изображения требуется авторизация в Google для загрузки в браузере, может ли быть проблема с авторизацией? (Примечание. ЕслиЯ вручную вставляю ссылку для скачивания, сгенерированную программой, в мой браузер, она корректно загружает изображение) (PS Я абсолютный нуб, так что да) (Заранее спасибо за любые ответы)

1 Ответ

0 голосов
/ 20 декабря 2018

Вместо использования urllib для загрузки, используйте запросы и получите содержимое страницы, используя GET rest call, а затем преобразуйте содержимое ответа в суповое содержимое, используя beautifulsoup, а затем укажите на содержимое, которое вы хотите загрузить, в качестве функции загрузки внутри html.будет иметь ссылку для загрузки, связанную с ним, а затем снова отправить запрос на получение с загрузкой js.

import requests
import bs4
response = requests.get(<your_url>)
soup = bs4.BeautifulSoup(response.content, 'html5lib')
# Get the download link and supply all the necessary values to the link
# Initiate Requests again
...