这里有点问题,我找不到详细的文档来解决这个问题。我知道如何从URL中获取文件名,如果URL看起来像这样,例如:
https://preview.redd.it/award_images/t5_q0gj4/ks45ij6w05f61_oldHugz.png
但我的问题是,如果URL不明确并且没有嵌入路径,如何获取文件名,例如:
https://codeload.github.com/ecthros/uncaptcha2/zip/master
我所知道的几乎每一个方法都会返回"master"作为文件名,而实际的文件名是"uncaptcha2master.zip"。随着URL的复杂性,这个问题会变得更糟。显然,我可以下载文件并获得这样的文件名,但问题是我有几千个URL,获得这样的名称意味着我将不得不永远等待,并愿意使用我所有的带宽和存储来这样做,所以在我的情况下,这不是一个可行的选择。
如果有人对如何克服这个问题有任何想法,请让我知道
当您访问的url不是像https://codeload.github.com/ecthros/uncaptcha2/zip/master
这样的文件时,服务器会处理请求并根据请求返回文件url。因此,你不能仅仅猜测进程算法,除非你通过泛化找到进程的逻辑,否则你无法捕捉文件名。但在大多数情况下,您无法根据端点检索文件名。
您可以使用模块cgi
解析响应http标头中的文件名,然后获取参数filename
,此代码返回'uncaptcha2-master.zip'
import requests
import cgi
URL = 'https://codeload.github.com/ecthros/uncaptcha2/zip/master'
response = requests.get(URL)
header = response.headers.get('Content-Disposition', '')
_, params = cgi.parse_header(header)
filename = params['filename']
# uncaptcha2-master.zip
print(filename)
关于参数文件名:
后面跟一个字符串,包含传输文件的原始名称。文件名始终是可选的,应用程序不能盲目使用:应该删除路径信息,并转换为服务器文件系统规则。该参数主要提供指示性信息
您可以在此处获得有关此参数和内容处置响应标头的更多信息