如何通过 Python 请求获取 pdf 文件名?
How to get pdf filename with Python requests?
我正在使用 Python requests lib 从网上获取 PDF 文件。这工作正常,但我现在还想要原始文件名。如果我在 Firefox 中转到 PDF 文件并单击 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 文件的文件名吗?
显然,对于此特定资源,它位于:
r.headers['content-disposition']
虽然不知道是否总是这样。
它在 http header content-disposition
中指定。因此,要提取名称,您需要执行以下操作:
import re
d = r.headers['content-disposition']
fname = re.findall("filename=(.+)", d)[0]
通过正则表达式(re
模块)从字符串中提取的名称。
基于其他一些答案,以下是我的做法。如果没有 Content-Disposition
header,我从下载 URL:
解析它
import re
import requests
from requests.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 字符串,但为了简单起见,我不想涉及更多的库。
您可以使用 werkzeug
作为选项 headers https://werkzeug.palletsprojects.com/en/0.15.x/http/#werkzeug.http.parse_options_header
>>> import werkzeug
>>> werkzeug.parse_options_header('text/html; charset=utf8')
('text/html', {'charset': 'utf8'})
从Content-Disposition获取文件名的简单python3实现:
import requests
response = requests.get(<your-url>)
print(response.headers.get("Content-Disposition").split("filename=")[1])
我正在使用 Python requests lib 从网上获取 PDF 文件。这工作正常,但我现在还想要原始文件名。如果我在 Firefox 中转到 PDF 文件并单击 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 文件的文件名吗?
显然,对于此特定资源,它位于:
r.headers['content-disposition']
虽然不知道是否总是这样。
它在 http header content-disposition
中指定。因此,要提取名称,您需要执行以下操作:
import re
d = r.headers['content-disposition']
fname = re.findall("filename=(.+)", d)[0]
通过正则表达式(re
模块)从字符串中提取的名称。
基于其他一些答案,以下是我的做法。如果没有 Content-Disposition
header,我从下载 URL:
import re
import requests
from requests.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 字符串,但为了简单起见,我不想涉及更多的库。
您可以使用 werkzeug
作为选项 headers https://werkzeug.palletsprojects.com/en/0.15.x/http/#werkzeug.http.parse_options_header
>>> import werkzeug
>>> werkzeug.parse_options_header('text/html; charset=utf8')
('text/html', {'charset': 'utf8'})
从Content-Disposition获取文件名的简单python3实现:
import requests
response = requests.get(<your-url>)
print(response.headers.get("Content-Disposition").split("filename=")[1])