如何在Web上获取文件的创建日期(使用Python)?

时间:2009-01-09 17:11:15

标签: python http

我有一个python应用程序,它依赖于客户从网站下载的文件。

该网站不在我的控制之下,并且没有API来检查该文件的“最新版本”。

是否有一种简单的方法可以通过URL访问文件(在python中)并检查它的日期(或大小),而无需每次都将其下载到客户端计算机上?

更新:感谢那些提及“最后修改”日期的人。这是要查看的正确参数。

我想我没有说清楚这个问题。我如何从python脚本执行此操作?我想申请检查文件,然后下载(如果(最后修改日期<当前文件日期)。

6 个答案:

答案 0 :(得分:5)

没有可靠的方法来做到这一点。如您所知,文件可以由Web服务器即时创建,并且“此文件的年龄”这个问题没有意义。网络服务器可以选择提供Last-Modified标头,但它可以告诉你它想要什么。

答案 1 :(得分:5)

考虑到“上次修改”可能不存在:

>>> from urllib import urlopen
>>> f=urlopen('http://google.com/')
>>> i=f.info()
>>> i.keys()
['set-cookie', 'expires', 'server', 'connection', 'cache-control', 'date', 'content-type']
>>> i.getdate('date')
(2009, 1, 10, 16, 17, 8, 0, 1, 0)
>>> i.getheader('date')
'Sat, 10 Jan 2009 16:17:08 GMT'
>>> i.getdate('last-modified')
>>>

现在你可以比较:

if (i.getdate('last-modified') or i.getheader('date')) > current_file_date:
  open('file', 'w').write(f.read())

答案 2 :(得分:4)

检查Last-Modified标题。

编辑:尝试urllib2

编辑2:这个short tutorial应该会让你有一个很好的感觉来实现你的目标。

答案 3 :(得分:2)

在HTTP 1.1中,Content-Disposition header field旨在将此类信息保存在creation-date参数中(请参阅RFC 2183)。

答案 4 :(得分:1)

也许是问题的更新答案... 例如,我发现此代码适用于excel文件。可以肯定的是,这将取决于服务器决定提供什么。

from urllib.request import urlopen
URL = 'url'
with urlopen(URL) as f:
    print(dict(f.getheaders())['Last-Modified'])
    # Remove the ['Last-Modified'] if you want to see what is in the header

答案 5 :(得分:0)

我构建了一个基于etags的工具。听起来很像你所描述的:

pfetch是一个扭曲的工具,它按计划执行此操作,可以运行许多很多URL并在更改后触发事件(下载后)。这很简单,但仍然可能比你想要的更复杂。

This code然而,正是你所要求的。

所以,请选择。 :)