Как получить имя файла pdf с запросами Python? - программирование
Подтвердить что ты не робот

Как получить имя файла pdf с запросами Python?

Я использую Python запросы lib, чтобы получить PDF файл из Интернета. Это отлично работает, но теперь я также хочу оригинальное имя файла. Если я перейду в PDF файл в Firefox и нажмите download, у него уже есть имя файла, предназначенное для сохранения pdf. Как получить это имя файла?

Например:

import requests
r = requests.get('http://www.researchgate.net/profile/M_Gotic/publication/260197848_Mater_Sci_Eng_B47_%281997%29_33/links/0c9605301e48beda0f000000.pdf')
print r.headers['content-type']  # prints 'application/pdf'

Я проверил r.headers на что-нибудь интересное, но там нет имени файла. Я действительно надеялся на что-то вроде r.filename..

Кто-нибудь знает, как я могу получить имя файла загруженного PDF файла с библиотекой запросов?

4b9b3361

Ответ 1

Он указан в заголовке http content-disposition. Итак, чтобы извлечь имя, которое вы бы сделали:

import re
d = r.headers['content-disposition']
fname = re.findall("filename=(.+)", d)

Имя, извлеченное из строки через регулярное выражение (re module).

Ответ 2

По-видимому, для этого конкретного ресурса он находится в:

r.headers['content-disposition']

Не знаю, всегда ли это так.

Ответ 3

Опираясь на некоторые другие ответы, вот как я это делаю. Если заголовка Content-Disposition нет, я анализирую его по URL-адресу загрузки.

import re
import requests
from request.exceptions import RequestException


url = 'http://www.example.com/downloads/sample.pdf'

try:
    with requests.get(url) as r:

        fname = ''
        if "Content-Disposition" in r.headers.keys():
            fname = re.findall("filename=(.+)", r.headers["Content-Disposition"])[0]
        else:
            fname = url.split("/")[-1]

        print(fname)
except RequestException as e:
    print(e)

Возможно, есть более эффективные способы анализа строки URL, но для простоты я не хотел привлекать больше библиотек.