Получение имени файла и расширения формирует URL в python - PullRequest
0 голосов
/ 19 апреля 2020

Итак, я делаю это приложение-загрузчик в python , используя tkinter и urllib.request , и я хочу дать пользователю возможность загрузить файл с именем и расширением по умолчанию. И я знаю, что существуют МИЛЛИОНЫ учебных пособий о том, как это сделать, но моя проблема с этим конкретным c URL: https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcR9JHQ-y1AyCjkJt3gl0jTtNtQdhv0lCdDYxqnc2wY9zy_hSOSy Я пробовал много кодов, таких как wget и urlparse но ни один из них не смог получить расширение этого файла по его URL. Так есть ли другой способ? Команда wget:

url = 'https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcR9JHQ-y1AyCjkJt3gl0jTtNtQdhv0lCdDYxqnc2wY9zy_hSOSy'
test = wget.detect_filename(url)
print(test)

Вывод с указанным URL:

images

Команда urllib.parse:

url = 'https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcR9JHQ-y1AyCjkJt3gl0jTtNtQdhv0lCdDYxqnc2wY9zy_hSOSy'
path = urllib.parse.urlparse(url).path
ext = os.path.splitext(path)[1]
print(path)
print(ext)

Вывод с указанным URL :

/images

Что-то не так с URL?

Ответы [ 2 ]

2 голосов
/ 19 апреля 2020

Вы должны быть в состоянии получить MIME-тип из заголовков ответов, а затем использовать mimetypes , чтобы получить расширение, предлагающее

import requests, mimetypes

r = requests.get('https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcR9JHQ-y1AyCjkJt3gl0jTtNtQdhv0lCdDYxqnc2wY9zy_hSOSy')
r.headers
{'Accept-Ranges': 'bytes', 'Content-Type': 'image/jpeg', 'Access-Control-Allow-Origin': '*', 'Content-Length': '4517', 'Date': 'Sun, 19 Apr 2020 09:23:26 GMT', 'Expires': 'Mon, 19 Apr 2021 09:23:26 GMT', 'Last-Modified': 'Fri, 15 Jan 2016 11:47:48 GMT', 'X-Content-Type-Options': 'nosniff', 'Server': 'sffe', 'X-XSS-Protection': '0', 'Cache-Control': 'public, max-age=31536000', 'Age': '840', 'Alt-Svc': 'quic=":443"; ma=2592000; v="46,43",h3-Q050=":443"; ma=2592000,h3-Q049=":443"; ma=2592000,h3-Q048=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,h3-T050=":443"; ma=2592000'}

r.headers['Content-Type']
'image/jpeg'

mimetypes.guess_all_extensions(r.headers['Content-Type'], strict=False)
['.jpe', '.jpeg', '.jpg']
0 голосов
/ 19 апреля 2020

Попробуйте это. Вы также можете изменить расширение и имя выходного файла, отредактировав переменную final_file_name. Для ответа я оставил его как "image.jpg".

import requests

final_url = "https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcR9JHQ-y1AyCjkJt3gl0jTtNtQdhv0lCdDYxqnc2wY9zy_hSOSy"
final_file = requests.get(final_url)
final_file_name = "image.jpg"
open(final_file_name,"wb").write(final_file.content)
...