繁体   English   中英

每次运行此程序时调用datetime.now()

[英]Call datetime.now() each time i run this program

我正在使用beautifulsoup来抓取一个网站,我想将截取日期与从datetime.date.today()调用收到的日期进行比较

from BeautifulSoup import BeautifulSoup
import datetime, urllib2, re

opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
url = ('http://phoenix.backpage.com/SportsEquipForSale/')
myUrl = opener.open(url).read()
soup = BeautifulSoup(myUrl)
outfile = open('C:/Projects/Web Scraping Practice/datetime.txt', 'w')
date = soup.find("div", {"class" : "date"})        #scraped date
date = re.sub('[.]', '', date.contents[0]).strip() 
outfile.write(datetime.date.today().strftime('%a %b %w')+ '\n'+ date)

现在,代码只是将当前日期(重新格式化)和已删除日期转储到文件中。 我遇到的问题是datetime.date.today()只被评估一次所以每次运行这个程序datetime.date.today()只有在我收到缓存后每天运行程序的第一天才正确如果这个格式很差,我会事先道歉。我对编程比较新。

您的代码已经调用datetime.now()每次运行时间。

显然你感到困惑的是你在日期使用strftime('%a %b %w') ,今天看起来就像下周三的那种格式。 正如文档解释:

  • %a是工作日的简短名称。
  • %b是短月份名称。
  • %w是工作日编号(星期日为0,星期六为6)。

因此,2013年7月10日是“7月3日星期三”,2013年7月17日也是“7月3日星期三”。


显然你正在寻找一种方法来获得一个月的日子,而不是一周中的那一天,但没有领先的0。

不幸的是,没有可移植的方法直接这样做。 最初的C strftime没有它,所以这就是C89标准,这就是Python复制的内容。


如果你只是希望在你的机器上运行它,而不是便携式:CPython实际实现strftime的方式就是调用你的平台的C函数,这可能确实有一种方法来获得没有前导0的那一天。

  • POSIX给出%e 这意味着它适用于每个最新的Unix(包括Mac)和大多数类Unix(包括Linux) - 但不适用于Windows。
  • glibc添加了,BSD复制,标记字符来控制填充,因此你可以使用%_d%-d (取决于你是否想要一个空格或什么都没有)。 这意味着它适用于每个最新的BSD Unix(包括Mac)和每个基于glibc的系统(包括Linux) - 但同样不适用于Windows。
  • MSVCRT添加了不同的标志字符,因此您可以使用%#d 这意味着它适用于Windows(以及其他一些复制它的平台;我认为Symbian?) - 但不是其他任何东西。

当然,如果您使用的是Jython,IronPython或PyPy,它可能取决于底层Java,.NET或Python运行时的某些功能,而不是C API。


如果您希望它是可移植的,您要么不能使用strftime ,要么必须对其进行后期处理。

你已经在评论中自己想出了这个:

datetime.date.today().strftime('%a %b %d').replace(' 0', ' ')

除非某些语言环境中的月份名称可以以0开头(这似乎不太可能),否则这显然是安全有效的。 但它有点hacky,所以你可能想添加一个评论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM