我正在使用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()只有在我收到缓存后每天运行程序的第一天才正确日期 如果格式不好,我会提前道歉。我对编程比较新。
答案 0 :(得分:4)
您的代码已经 每次运行时都会调用datetime.now()
。
显然你感到困惑的是你在约会时使用strftime('%a %b %w')
,今天看起来就像下周三的那种格式。正如the docs解释:
%a
是工作日的简短名称。%b
是短月名。%w
是工作日编号(星期日为0,星期六为6)。所以,2013年7月10日是“7月3日星期三”,2013年7月17日也是“7月3日星期三”。
显然,您正在寻找一种方法来获取月的日期,而不是周的日子,但没有领先的0。
不幸的是,没有可移植的方法直接执行此操作。最初的C strftime
没有它,所以这就是C89标准的内容,这就是Python复制的内容。
如果你只是希望在你的机器上运行,而不是便携:CPython实际实现strftime
的方式就是调用平台的C函数,这可能 有一个如何获得没有领先0的一天。
%e
。这意味着它适用于每个最新的Unix(包括Mac)和大多数类Unix(包括Linux),但不适用于Windows。%_d
或%-d
(取决于您是想要空格还是空白)。这意味着它适用于每个最新的BSD Unix(包括Mac)和每个基于glibc的系统(包括Linux) - 但同样不适用于Windows。%#d
。这意味着它适用于Windows(以及其他一些复制它的平台;我认为Symbian?) - 但不是其他任何东西。当然,如果你使用的是Jython,IronPython或PyPy,它可能依赖于底层Java,.NET或Python运行时的某些功能,而不是C API。
如果您希望这是可移植的,则要么无法使用strftime
,要么必须对其进行后期处理。
你已经在评论中找到了这个:
datetime.date.today().strftime('%a %b %d').replace(' 0', ' ')
除非某些语言环境中的月份名称可以以0开头(这似乎不太可能),否则这显然是安全有效的。但它有点hacky,所以你可能想添加评论。