我如何以编程方式告诉我在网络服务器上是否存在我要求的文件名?

PyN*_*bie 0 python urllib

我正在帮助某人从网站上提取一堆(数万)pdf文件.我们有文件名的模式,但不是所有文件都存在.我假设要求提供一个不存在的文件是很粗鲁的,特别是在这种规模上.我正在使用python,在我的urllib2测试中,我发现这个片段会在文件存在的情况下获取该文件

s=urllib.urlretrieve('http://website/directory/filename.pdf','c:\\destination.pdf')
Run Code Online (Sandbox Code Playgroud)

如果该文件不存在,那么我将得到一个文件,其中包含我分配的名称,但文件来自404页面.现在我可以在完成后处理这个(读取文件并删除所有404页面),但这对他们的服务器来说似乎不太好,也不是非常pythonic.

我试着看看urllib和urlretrieve中的各种函数,并且没有看到任何告诉我文件是否存在的东西.

jte*_*ace 6

您可以检查响应的返回码.现有PDF将为200,不存在的PDF为404.您可以使用请求库使这更容易:

>>> import requests
>>> r = requests.get('http://cdn.sstatic.net/stackoverflow/img/sprites.png')
>>> r.status_code
200
>>> r = requests.get('http://cdn.sstatic.net/stackoverflow/img/sprites.xxx')
>>> r.status_code
404
Run Code Online (Sandbox Code Playgroud)