通过python将带有'th''st''rd''nd'的日期字符串转换为日期格式
Posted
技术标签:
【中文标题】通过python将带有\'th\'\'st\'\'rd\'\'nd\'的日期字符串转换为日期格式【英文标题】:Convert string of dates with 'th' 'st' 'rd' 'nd' into date format via python通过python将带有'th''st''rd''nd'的日期字符串转换为日期格式 【发布时间】:2016-10-19 08:45:13 【问题描述】:我正在使用漂亮的汤来报废一个网站。这是CSS
<div id="listing-details-list">
<h3 class="listing-details-header">
Details:
<span>Posted on: 14th June 2016</span>
</h3>
</div>
我用来获取日期的代码是这样的
# date
try:
date=soup.find("h3","listing-details-header")
date_result= str(date.get_text().encode("utf-8").strip()[20:])
print "\nPublished date: ", date_result
except StandardError as e:
date_result="Error was 0".format(e)
print date_result
我得到的结果是一个日期作为字符串。一些样本是
23rd June 2016
21st July 2016
20th July 2016
3rd July 2016
现在,我希望日期是一个正确的日期,格式如下所示,以便我可以对其进行计算
23/6/2016
21/7/2016
20/7/2016
3/7/2016
在我的代码中获得所需日期的最佳方法是什么?
我希望以这种方式保存日期:
Month= 6
Day = 23
Year = 2016
我尝试了标记为最佳答案的解决方案,它有效
try:
date=soup.find("h3","listing-details-header")
date_result= str(date.get_text().encode("utf-8").strip()[20:])
date_result=parse(date_result) #added
month = date_result.month
day = date_result.day
year = date_result.year
print month
print day
print year
print "\nPublished date: ", date_result
except StandardError as e:
date_result="Error was 0".format(e)
print date_result
【问题讨论】:
“我尝试了标记为最佳答案的解决方案并且它有效” - 并且您将其标记为“已接受”,因此每个人都清楚特定的解决方案对您有用。无需在您的帖子中重复答案。如果您认为您自己的答案与提供的答案有很大不同,您可以随时将其添加为作为单独的答案。 谢谢。我会记下来的。我是新来的 【参考方案1】:要解析日期,我会让dateutil
parser 完成这项工作:
>>> from dateutil.parser import parse
>>> l = ["23rd June 2016", "21st July 2016", "20th July 2016", "3rd July 2016"]
>>> for item in l:
... parse(item)
...
datetime.datetime(2016, 6, 23, 0, 0)
datetime.datetime(2016, 7, 21, 0, 0)
datetime.datetime(2016, 7, 20, 0, 0)
datetime.datetime(2016, 7, 3, 0, 0)
您将获得 datetime
实例,您可以使用这些实例来执行与日期或时间相关的计算。
我还会改进您在页面上定位所需元素并提取日期的方式:
from dateutil.parser import parse
from bs4 import BeautifulSoup
data = """
<div id="listing-details-list">
<h3 class="listing-details-header">
Details:
<span>Posted on: 14th June 2016</span>
</h3>
</div>"""
soup = BeautifulSoup(data, "html.parser")
for item in soup.find_all("span", text=lambda text: text and text.startswith("Posted on:")):
date_string = item.get_text().split(": ")[-1]
print(parse(date_string))
【讨论】:
谢谢。我安装了模块,它工作得很好。我实际上需要将日期、月份和年份保存在单独的变量日、月、年中。可能吗? @Joanne 当然,您可以访问日期时间对象的.day
、.month
、.year
属性。
试过了。请检查我编辑的答案。有错误。好像没有定义日期时间?
@Joanne month= datetime.month(date_result)
应该是 month = date_result.month
,这就是 alecxe 所说的。以上是关于通过python将带有'th''st''rd''nd'的日期字符串转换为日期格式的主要内容,如果未能解决你的问题,请参考以下文章
提取以“st”、“nd”、“rd”、“th”结尾的日期,同时使用 RegEx 将日期与月份交换
python--以1-31的数字作为结尾的列表?论英文好的重要性!
Flutter:移动到上一个屏幕(2nd)并仅删除上一个屏幕(2nd 3rd 4th),而不是所有屏幕(1st 2nd 3rd 4th)