我正在尝试使用Python 3.7中的urllib从链接下载文件,然后下载HTML文件而不是图像文件。
因此,我正尝试从Google表单接收信息,该信息会发送到Google表格。我可以收到工作表中的信息,没问题。但是,表单需要提交图像,该图像在工作表中显示为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)
我获得了网址并隔离了图像的ID:
ImgId="https://drive.google.com/open?id=1Mp5XYoyyEfWJryz8ojLbHuZ6V0IzERIV"
ImgId=ImgId[33:]
然后我将ID放入下载链接中
ImgId="https://drive.google.com/uc?authuser=0&id="+ImgId+"&export=download"
(在上面的示例中)结果为“ https://drive.google.com/uc?authuser=0&id=1YCBmEOz6_l7WDQw5t6AYBSb9B5XXKTuX&export=download”。 接下来,我运行下载功能:
downloader(ImgId)
因此,在此之后,我希望将png文件下载到该程序的文件夹中,但是它下载了 google驱动器登录页面的html文件而不是图像文件,甚至图片的html文件。注意要查看或下载图像,需要登录到Google才能在浏览器中下载,授权可能会成为问题吗? (注意:如果我将程序生成的下载链接手动粘贴到浏览器中,则会正确下载图像) (PS我绝对是菜鸟,是的) (感谢您的回答)
答案 0 :(得分:1)
与其使用urllib进行下载,不如使用请求并通过GET rest调用获取页面内容,然后使用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